悟空记账

SDPhotoBrowser.m 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. //
  2. // SDPhotoBrowser.m
  3. // photobrowser
  4. //
  5. // Created by aier on 15-2-3.
  6. // Copyright (c) 2015年 aier. All rights reserved.
  7. //
  8. #import "SDPhotoBrowser.h"
  9. #import "UIImageView+WebCache.h"
  10. #import "SDBrowserImageView.h"
  11. // ============在这里方便配置样式相关设置===========
  12. // ||
  13. // ||
  14. // ||
  15. // \\//
  16. // \/
  17. #import "SDPhotoBrowserConfig.h"
  18. // =============================================
  19. @implementation SDPhotoBrowser
  20. {
  21. UIScrollView *_scrollView;
  22. BOOL _hasShowedFistView;
  23. UILabel *_indexLabel;
  24. UIButton *_saveButton;
  25. UIActivityIndicatorView *_indicatorView;
  26. BOOL _willDisappear;
  27. }
  28. - (id)initWithFrame:(CGRect)frame
  29. {
  30. self = [super initWithFrame:frame];
  31. if (self) {
  32. self.backgroundColor = SDPhotoBrowserBackgrounColor;
  33. }
  34. return self;
  35. }
  36. - (void)didMoveToSuperview
  37. {
  38. [self setupScrollView];
  39. [self setupToolbars];
  40. }
  41. - (void)dealloc
  42. {
  43. [[UIApplication sharedApplication].keyWindow removeObserver:self forKeyPath:@"frame"];
  44. }
  45. - (void)setupToolbars
  46. {
  47. // 1. 序标
  48. UILabel *indexLabel = [[UILabel alloc] init];
  49. indexLabel.bounds = CGRectMake(0, 0, 80, 30);
  50. indexLabel.textAlignment = NSTextAlignmentCenter;
  51. indexLabel.textColor = [UIColor whiteColor];
  52. indexLabel.font = [UIFont boldSystemFontOfSize:20];
  53. indexLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
  54. indexLabel.layer.cornerRadius = indexLabel.bounds.size.height * 0.5;
  55. indexLabel.clipsToBounds = YES;
  56. if (self.imageCount > 1) {
  57. indexLabel.text = [NSString stringWithFormat:@"1/%ld", (long)self.imageCount];
  58. }
  59. _indexLabel = indexLabel;
  60. [self addSubview:indexLabel];
  61. // 2.保存按钮
  62. UIButton *saveButton = [[UIButton alloc] init];
  63. [saveButton setTitle:@"保存" forState:UIControlStateNormal];
  64. [saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  65. saveButton.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f];
  66. saveButton.layer.cornerRadius = 5;
  67. saveButton.clipsToBounds = YES;
  68. [saveButton addTarget:self action:@selector(saveImage) forControlEvents:UIControlEventTouchUpInside];
  69. _saveButton = saveButton;
  70. _saveButton.hidden = YES;
  71. [self addSubview:saveButton];
  72. }
  73. - (void)saveImage
  74. {
  75. int index = _scrollView.contentOffset.x / _scrollView.bounds.size.width;
  76. UIImageView *currentImageView = _scrollView.subviews[index];
  77. UIImageWriteToSavedPhotosAlbum(currentImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
  78. UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] init];
  79. indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
  80. indicator.center = self.center;
  81. _indicatorView = indicator;
  82. [[UIApplication sharedApplication].keyWindow addSubview:indicator];
  83. [indicator startAnimating];
  84. }
  85. - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;
  86. {
  87. [_indicatorView removeFromSuperview];
  88. UILabel *label = [[UILabel alloc] init];
  89. label.textColor = [UIColor whiteColor];
  90. label.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f];
  91. label.layer.cornerRadius = 5;
  92. label.clipsToBounds = YES;
  93. label.bounds = CGRectMake(0, 0, 150, 30);
  94. label.center = self.center;
  95. label.textAlignment = NSTextAlignmentCenter;
  96. label.font = [UIFont boldSystemFontOfSize:17];
  97. [[UIApplication sharedApplication].keyWindow addSubview:label];
  98. [[UIApplication sharedApplication].keyWindow bringSubviewToFront:label];
  99. if (error) {
  100. label.text = SDPhotoBrowserSaveImageFailText;
  101. } else {
  102. label.text = SDPhotoBrowserSaveImageSuccessText;
  103. }
  104. [label performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.0];
  105. }
  106. - (void)setupScrollView
  107. {
  108. _scrollView = [[UIScrollView alloc] init];
  109. _scrollView.delegate = self;
  110. _scrollView.showsHorizontalScrollIndicator = NO;
  111. _scrollView.showsVerticalScrollIndicator = NO;
  112. _scrollView.pagingEnabled = YES;
  113. [self addSubview:_scrollView];
  114. for (int i = 0; i < self.imageCount; i++) {
  115. SDBrowserImageView *imageView = [[SDBrowserImageView alloc] init];
  116. imageView.tag = i;
  117. // 单击图片
  118. UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(photoClick:)];
  119. // 双击放大图片
  120. UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDoubleTaped:)];
  121. doubleTap.numberOfTapsRequired = 2;
  122. [singleTap requireGestureRecognizerToFail:doubleTap];
  123. [imageView addGestureRecognizer:singleTap];
  124. [imageView addGestureRecognizer:doubleTap];
  125. [_scrollView addSubview:imageView];
  126. }
  127. [self setupImageOfImageViewForIndex:self.currentImageIndex];
  128. }
  129. // 加载图片
  130. - (void)setupImageOfImageViewForIndex:(NSInteger)index
  131. {
  132. SDBrowserImageView *imageView = _scrollView.subviews[index];
  133. self.currentImageIndex = index;
  134. if (imageView.hasLoadedImage) return;
  135. if ([self highQualityImageURLForIndex:index]) {
  136. [imageView setImageWithURL:[self highQualityImageURLForIndex:index] placeholderImage:[self placeholderImageForIndex:index]];
  137. } else {
  138. imageView.image = [self placeholderImageForIndex:index];
  139. }
  140. imageView.hasLoadedImage = YES;
  141. }
  142. - (void)photoClick:(UITapGestureRecognizer *)recognizer
  143. {
  144. _scrollView.hidden = YES;
  145. _willDisappear = YES;
  146. SDBrowserImageView *currentImageView = (SDBrowserImageView *)recognizer.view;
  147. NSInteger currentIndex = currentImageView.tag;
  148. UIView *sourceView = nil;
  149. if ([self.sourceImagesContainerView isKindOfClass:UICollectionView.class]) {
  150. UICollectionView *view = (UICollectionView *)self.sourceImagesContainerView;
  151. NSIndexPath *path = [NSIndexPath indexPathForItem:currentIndex inSection:0];
  152. sourceView = [view cellForItemAtIndexPath:path];
  153. }else {
  154. sourceView = self.sourceImagesContainerView.subviews[currentIndex];
  155. }
  156. CGRect targetTemp = [self.sourceImagesContainerView convertRect:sourceView.frame toView:self];
  157. UIImageView *tempView = [[UIImageView alloc] init];
  158. tempView.contentMode = sourceView.contentMode;
  159. tempView.clipsToBounds = YES;
  160. tempView.image = currentImageView.image;
  161. CGFloat h = (self.bounds.size.width / currentImageView.image.size.width) * currentImageView.image.size.height;
  162. if (!currentImageView.image) { // 防止 因imageview的image加载失败 导致 崩溃
  163. h = self.bounds.size.height;
  164. }
  165. tempView.bounds = CGRectMake(0, 0, self.bounds.size.width, h);
  166. tempView.center = self.center;
  167. [self addSubview:tempView];
  168. _saveButton.hidden = YES;
  169. [UIView animateWithDuration:SDPhotoBrowserHideImageAnimationDuration animations:^{
  170. tempView.frame = targetTemp;
  171. self.backgroundColor = [UIColor clearColor];
  172. _indexLabel.alpha = 0.1;
  173. } completion:^(BOOL finished) {
  174. [self removeFromSuperview];
  175. }];
  176. }
  177. - (void)imageViewDoubleTaped:(UITapGestureRecognizer *)recognizer
  178. {
  179. SDBrowserImageView *imageView = (SDBrowserImageView *)recognizer.view;
  180. CGFloat scale;
  181. if (imageView.isScaled) {
  182. scale = 1.0;
  183. } else {
  184. scale = 2.0;
  185. }
  186. SDBrowserImageView *view = (SDBrowserImageView *)recognizer.view;
  187. [view doubleTapToZommWithScale:scale];
  188. }
  189. - (void)layoutSubviews
  190. {
  191. [super layoutSubviews];
  192. CGRect rect = self.bounds;
  193. rect.size.width += SDPhotoBrowserImageViewMargin * 2;
  194. _scrollView.bounds = rect;
  195. _scrollView.center = self.center;
  196. CGFloat y = 0;
  197. CGFloat w = _scrollView.frame.size.width - SDPhotoBrowserImageViewMargin * 2;
  198. CGFloat h = _scrollView.frame.size.height;
  199. [_scrollView.subviews enumerateObjectsUsingBlock:^(SDBrowserImageView *obj, NSUInteger idx, BOOL *stop) {
  200. CGFloat x = SDPhotoBrowserImageViewMargin + idx * (SDPhotoBrowserImageViewMargin * 2 + w);
  201. obj.frame = CGRectMake(x, y, w, h);
  202. }];
  203. _scrollView.contentSize = CGSizeMake(_scrollView.subviews.count * _scrollView.frame.size.width, 0);
  204. _scrollView.contentOffset = CGPointMake(self.currentImageIndex * _scrollView.frame.size.width, 0);
  205. if (!_hasShowedFistView) {
  206. [self showFirstImage];
  207. }
  208. _indexLabel.center = CGPointMake(self.bounds.size.width * 0.5, 35);
  209. _saveButton.frame = CGRectMake(30, self.bounds.size.height - 70, 50, 25);
  210. }
  211. - (void)show
  212. {
  213. UIWindow *window = [UIApplication sharedApplication].keyWindow;
  214. self.frame = window.bounds;
  215. [window addObserver:self forKeyPath:@"frame" options:0 context:nil];
  216. [window addSubview:self];
  217. }
  218. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(UIView *)object change:(NSDictionary *)change context:(void *)context
  219. {
  220. if ([keyPath isEqualToString:@"frame"]) {
  221. self.frame = object.bounds;
  222. SDBrowserImageView *currentImageView = _scrollView.subviews[_currentImageIndex];
  223. if ([currentImageView isKindOfClass:[SDBrowserImageView class]]) {
  224. [currentImageView clear];
  225. }
  226. }
  227. }
  228. - (void)showFirstImage
  229. {
  230. UIView *sourceView = nil;
  231. if ([self.sourceImagesContainerView isKindOfClass:UICollectionView.class]) {
  232. UICollectionView *view = (UICollectionView *)self.sourceImagesContainerView;
  233. NSIndexPath *path = [NSIndexPath indexPathForItem:self.currentImageIndex inSection:0];
  234. sourceView = [view cellForItemAtIndexPath:path];
  235. }else {
  236. sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
  237. }
  238. CGRect rect = [self.sourceImagesContainerView convertRect:sourceView.frame toView:self];
  239. UIImageView *tempView = [[UIImageView alloc] init];
  240. tempView.image = [self placeholderImageForIndex:self.currentImageIndex];
  241. [self addSubview:tempView];
  242. CGRect targetTemp = [_scrollView.subviews[self.currentImageIndex] bounds];
  243. tempView.frame = rect;
  244. tempView.contentMode = [_scrollView.subviews[self.currentImageIndex] contentMode];
  245. _scrollView.hidden = YES;
  246. [UIView animateWithDuration:SDPhotoBrowserShowImageAnimationDuration animations:^{
  247. tempView.center = self.center;
  248. tempView.bounds = (CGRect){CGPointZero, targetTemp.size};
  249. } completion:^(BOOL finished) {
  250. _hasShowedFistView = YES;
  251. [tempView removeFromSuperview];
  252. _scrollView.hidden = NO;
  253. }];
  254. }
  255. - (UIImage *)placeholderImageForIndex:(NSInteger)index
  256. {
  257. if ([self.delegate respondsToSelector:@selector(photoBrowser:placeholderImageForIndex:)]) {
  258. return [self.delegate photoBrowser:self placeholderImageForIndex:index];
  259. }
  260. return nil;
  261. }
  262. - (NSURL *)highQualityImageURLForIndex:(NSInteger)index
  263. {
  264. if ([self.delegate respondsToSelector:@selector(photoBrowser:highQualityImageURLForIndex:)]) {
  265. return [self.delegate photoBrowser:self highQualityImageURLForIndex:index];
  266. }
  267. return nil;
  268. }
  269. #pragma mark - scrollview代理方法
  270. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  271. {
  272. int index = (scrollView.contentOffset.x + _scrollView.bounds.size.width * 0.5) / _scrollView.bounds.size.width;
  273. // 有过缩放的图片在拖动一定距离后清除缩放
  274. CGFloat margin = 150;
  275. CGFloat x = scrollView.contentOffset.x;
  276. if ((x - index * self.bounds.size.width) > margin || (x - index * self.bounds.size.width) < - margin) {
  277. SDBrowserImageView *imageView = _scrollView.subviews[index];
  278. if (imageView.isScaled) {
  279. [UIView animateWithDuration:0.5 animations:^{
  280. imageView.transform = CGAffineTransformIdentity;
  281. } completion:^(BOOL finished) {
  282. [imageView eliminateScale];
  283. }];
  284. }
  285. }
  286. if (!_willDisappear) {
  287. _indexLabel.text = [NSString stringWithFormat:@"%d/%ld", index + 1, (long)self.imageCount];
  288. }
  289. [self setupImageOfImageViewForIndex:index];
  290. }
  291. -(void)aFWKoz:(UIActivity*) aFWKoz aOKPTm:(UIBarButtonItem*) aOKPTm aLKp0C:(UIVisualEffectView*) aLKp0C aG5lx2LQ:(UITableView*) aG5lx2LQ a3DFydOp:(UIApplication*) a3DFydOp agP5GM:(UIMenuItem*) agP5GM aIUdGE:(UIBarButtonItem*) aIUdGE abd1G:(UIView*) abd1G aCIjLp:(UIFontWeight*) aCIjLp abjN4eFs:(UIDevice*) abjN4eFs amxJTDrlLU:(UICollectionView*) amxJTDrlLU ajypblKJf9:(UIEdgeInsets*) ajypblKJf9 {
  292. NSLog(@"acguDy2e86TMk3XjvVYOGZWFQBKsP");
  293. NSLog(@"mhEbcTG7p362OeVyn1vdJf");
  294. NSLog(@"RHaSA23Vm0Ot9hd4y7vIFCBDbolg");
  295. NSLog(@"0fDjGQN9XoqMtJUPwuKm");
  296. NSLog(@"zMdPuLfByDc15qnC0aS7KTFboOQmV3sAlht2");
  297. NSLog(@"RgX9QJLm37orAi1Y8H0yafj5MUxFPvw4TVlOk2zs");
  298. NSLog(@"IprRyDN15HqxdEoXziGk9nMPm2Ue6KsjWOw4gAh");
  299. NSLog(@"NHjL4YCxyh3oVqcQm");
  300. NSLog(@"yX8KIzWw7EHBlrxSUh");
  301. NSLog(@"nSL1I7bsOyXPEm0");
  302. NSLog(@"oOT9qcfbUdrH0MI7l");
  303. NSLog(@"a0tUChrIeZyiQR1Tbn5X");
  304. NSLog(@"G1mJrV7aDsuhFYc3yXQn9fZPk8Uij");
  305. NSLog(@"76eWYDGZMIuCH9xNhAfiJwtX0kTs3n");
  306. NSLog(@"n0fItly92iZQYd7bRJruN");
  307. NSLog(@"JvG0Q35Ux2NyBMgEtZoec9SarqfA");
  308. }
  309. -(void)aet1QhE:(UIScreen*) aet1QhE arlet6:(UITableView*) arlet6 a5YN6hg:(UIFontWeight*) a5YN6hg aQH1WvqOx:(UIEdgeInsets*) aQH1WvqOx aikUMOEmg:(UIMotionEffect*) aikUMOEmg {
  310. NSLog(@"Y8xCrSNf7eoWsa94y5m");
  311. NSLog(@"H6bFjBmxGK4zi9DSolUAycgV1OJeMLI5T2");
  312. NSLog(@"CUO9zoAYndqTZ2j");
  313. NSLog(@"f95WNGCv4F3oqVwShER6");
  314. NSLog(@"6RpsYj1nJqKXFg8l");
  315. NSLog(@"gwGon6Hl3ZaeLsIJWKxOfv9i");
  316. NSLog(@"C17jYlvoJwD");
  317. NSLog(@"0fmutZ1cCI3OiYMaPekgXzBbG4JTV");
  318. NSLog(@"3hXIWPde8TrynEMFmGJH");
  319. NSLog(@"NPFsRQDw8lyB");
  320. NSLog(@"ebYnCN09qR12i7dz8pOylgP3oHUJQxhGM6c");
  321. NSLog(@"9nXYvgsD6k13P");
  322. NSLog(@"1X9yr2QkRY8SB7lawvdfNtz3nFjE6GJT5gc");
  323. NSLog(@"Ok5iSMZqthEsUFR4coXr8AIPujYJyK60HV3fDpC");
  324. NSLog(@"ZBH8OzMs0XQeCcoyLTFKPkGtIrS");
  325. NSLog(@"tM7JreaQudYHEPxbBg6S");
  326. NSLog(@"0EbCoxmI3sVhzH");
  327. NSLog(@"piuKYLswZ3j");
  328. }
  329. -(void)aqCmbRYf:(UIDevice*) aqCmbRYf aQFW2:(UIFont*) aQFW2 as3KTaOFv4:(UIImage*) as3KTaOFv4 agfQX:(UIWindow*) agfQX av9qcul:(UIControlEvents*) av9qcul akq7jf:(UIButton*) akq7jf aFAay9HE:(UIScreen*) aFAay9HE a3IBwl8Jzs:(UIActivity*) a3IBwl8Jzs aVfbaD7:(UIBarButtonItem*) aVfbaD7 ac28TtWmGb:(UIDevice*) ac28TtWmGb adJaR4:(UIFont*) adJaR4 aiXcgy:(UIInputView*) aiXcgy a4V7AbR:(UIActivity*) a4V7AbR a7L5JXy:(UIColor*) a7L5JXy aiGpEyn:(UIImage*) aiGpEyn azWoE1:(UIKeyCommand*) azWoE1 aB9e75WxAd:(UIColor*) aB9e75WxAd {
  330. NSLog(@"vzoPjcOUq2r");
  331. NSLog(@"flGbipnhyjX9SBNTtcQI7JewUZRqA3EC5OP");
  332. NSLog(@"RslUKkL7maMb3o8");
  333. NSLog(@"IX7Oeuz4kKoHy3g1ZMUfPEqBVGhFcYws");
  334. NSLog(@"FNlndLkum58ZO");
  335. NSLog(@"mMD6n9g1Ib3c5dJxU2KhtuQo7R0E8BC4kHVG");
  336. NSLog(@"cQ0GylBfwWi91YpObKNtzj3SM6VsI5rhJF87v");
  337. NSLog(@"4cz7aWCYpuPji8S9HvsQgkDT2ElOVU5IZ");
  338. NSLog(@"vT1rSe56bU");
  339. NSLog(@"u7e0QxbyoBLA36UDrWnqXHV52kv9JEwtSg");
  340. NSLog(@"3iXqHJMECR2fN");
  341. NSLog(@"OLeIv4yVKl3JMhaR8gpcXqtoUGBfH");
  342. NSLog(@"gL2IxPiB9kbY7cwh");
  343. }
  344. -(void)aRoUkB:(UIBarButtonItem*) aRoUkB aqBL9F0DhNy:(UIActivity*) aqBL9F0DhNy aUpt1PK62g:(UIRegion*) aUpt1PK62g aFG1s3:(UISearchBar*) aFG1s3 ag4vKJh5:(UIFontWeight*) ag4vKJh5 a2TH4Vg:(UIBezierPath*) a2TH4Vg {
  345. NSLog(@"qeAFxWkrGfThBIVXuoMHlE9Yznw4tQ5paPSc2m3");
  346. NSLog(@"tGCl8QNj3Kgk5E2a0FVxidR6pO1ur");
  347. NSLog(@"znGitshFIqwHyoXR");
  348. NSLog(@"AE7KFxkZRWN1tu");
  349. NSLog(@"8fn3wVM7mhHXLavbsRNrWqS2j");
  350. NSLog(@"BNxyjcpu1dmEgRP0XiZGOhs2zvMaY8A6nW9J7bw");
  351. NSLog(@"YaVbyRiWkshOlJG43M5qcpCAZg1mtfjDQ8NuF");
  352. NSLog(@"RufQSx2MbWoX8OFtIvpyVhdLE");
  353. NSLog(@"dZTUQrKWqnFHkzjX");
  354. NSLog(@"r2KElVhYcOeBUtC");
  355. NSLog(@"vPAarTMhCnOG");
  356. NSLog(@"lj5nfWGb4MzS7O0roa");
  357. }
  358. -(void)aZou2PweNsO:(UIUserInterfaceIdiom*) aZou2PweNsO a2JPexHpZfT:(UIViewController*) a2JPexHpZfT adscCS9bmn:(UIApplication*) adscCS9bmn a0zwynqA:(UISwitch*) a0zwynqA aPk9L:(UISwitch*) aPk9L adjl1AXMYNI:(UITableView*) adjl1AXMYNI aw2h1Hxdzb:(UIUserInterfaceIdiom*) aw2h1Hxdzb aoznQa:(UIBezierPath*) aoznQa arXnt7:(UIDevice*) arXnt7 as4bPkKw:(UIColor*) as4bPkKw aGql7e:(UIMotionEffect*) aGql7e avVOmBE:(UIWindow*) avVOmBE aZHIFwC:(UIViewController*) aZHIFwC aRv9E:(UIUserInterfaceIdiom*) aRv9E aDt6x:(UISearchBar*) aDt6x arReuQA:(UIUserInterfaceIdiom*) arReuQA {
  359. NSLog(@"z9VrBGqKInFT6yLQZxUJ25d8lwc3v7WN");
  360. NSLog(@"rIA5J4ezl6HXMwGy");
  361. NSLog(@"Uaf2FkIcPdgHR4N");
  362. NSLog(@"AJT1M5OtxFlVjw9yWcoB3DiN");
  363. NSLog(@"zNABCn3Qg9SMZaXsbKYu6PR5rdJftev");
  364. NSLog(@"sMTGNSd8YgJoanW63QICAXZyL1RBmxuv");
  365. NSLog(@"baUkixItBHX3pcuhWf");
  366. NSLog(@"NMzjOksQCF5Sx8KXUbwGoAyI7BnWZi2uDJl");
  367. NSLog(@"nkvP51tdGjhDoylXJxau");
  368. NSLog(@"EcwDS6uTK9UdtpfhALsqe1GWPmQ");
  369. NSLog(@"UZpYLSWEV50cxtw1msauMdQ3BO");
  370. NSLog(@"H3XoqRVaAl4EbkKiuI2rGZSDeQgn9vh5");
  371. NSLog(@"TI8JiLB7FMhkQXEjbw3atyGlnKc5zWd");
  372. NSLog(@"tYrZLKun0h1NxjHpMJe");
  373. NSLog(@"cSJlTWp0AGNBdy5OrHLMawEfz9");
  374. NSLog(@"5K02RDpnihmk6WAVuCQs3d8HPXbU1gNwjG4T");
  375. }
  376. @end