@pezkuwi/types-codec 16.5.5 → 16.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/LICENSE +201 -0
  2. package/abstract/Array.js +166 -0
  3. package/abstract/Base.js +101 -0
  4. package/abstract/Int.js +226 -0
  5. package/abstract/Object.js +40 -0
  6. package/{src/abstract/index.ts → abstract/index.js} +0 -3
  7. package/base/Compact.js +159 -0
  8. package/base/DoNotConstruct.js +95 -0
  9. package/base/Enum.js +369 -0
  10. package/{build/base → base}/Int.d.ts +1 -1
  11. package/base/Int.js +26 -0
  12. package/base/Null.js +77 -0
  13. package/base/Option.js +232 -0
  14. package/base/Result.js +63 -0
  15. package/base/Tuple.js +110 -0
  16. package/{build/base → base}/UInt.d.ts +1 -1
  17. package/base/UInt.js +23 -0
  18. package/base/Vec.js +102 -0
  19. package/base/VecAny.js +17 -0
  20. package/base/VecFixed.js +67 -0
  21. package/{src/base/index.ts → base/index.js} +0 -3
  22. package/{src/bundle.ts → bundle.js} +0 -6
  23. package/cjs/abstract/Array.d.ts +89 -0
  24. package/cjs/abstract/Array.js +170 -0
  25. package/cjs/abstract/Base.d.ts +75 -0
  26. package/cjs/abstract/Base.js +105 -0
  27. package/cjs/abstract/Int.d.ts +80 -0
  28. package/cjs/abstract/Int.js +230 -0
  29. package/cjs/abstract/Object.d.ts +67 -0
  30. package/cjs/abstract/Object.js +44 -0
  31. package/cjs/abstract/index.d.ts +3 -0
  32. package/cjs/abstract/index.js +9 -0
  33. package/cjs/base/Compact.d.ts +88 -0
  34. package/cjs/base/Compact.js +163 -0
  35. package/cjs/base/DoNotConstruct.d.ts +63 -0
  36. package/cjs/base/DoNotConstruct.js +99 -0
  37. package/cjs/base/Enum.d.ts +118 -0
  38. package/cjs/base/Enum.js +373 -0
  39. package/cjs/base/Int.d.ts +16 -0
  40. package/cjs/base/Int.js +30 -0
  41. package/cjs/base/Null.d.ts +56 -0
  42. package/cjs/base/Null.js +81 -0
  43. package/cjs/base/Option.d.ts +94 -0
  44. package/cjs/base/Option.js +236 -0
  45. package/cjs/base/Result.d.ts +38 -0
  46. package/cjs/base/Result.js +67 -0
  47. package/cjs/base/Tuple.d.ts +42 -0
  48. package/cjs/base/Tuple.js +114 -0
  49. package/cjs/base/UInt.d.ts +15 -0
  50. package/cjs/base/UInt.js +27 -0
  51. package/cjs/base/Vec.d.ts +28 -0
  52. package/cjs/base/Vec.js +107 -0
  53. package/cjs/base/VecAny.d.ts +15 -0
  54. package/cjs/base/VecAny.js +21 -0
  55. package/cjs/base/VecFixed.d.ts +30 -0
  56. package/cjs/base/VecFixed.js +71 -0
  57. package/cjs/base/index.d.ts +12 -0
  58. package/cjs/base/index.js +27 -0
  59. package/cjs/bundle.d.ts +7 -0
  60. package/cjs/bundle.js +12 -0
  61. package/cjs/extended/BTreeMap.js +14 -0
  62. package/cjs/extended/BTreeSet.js +189 -0
  63. package/cjs/extended/BitVec.js +112 -0
  64. package/cjs/extended/Bytes.js +74 -0
  65. package/cjs/extended/HashMap.js +14 -0
  66. package/cjs/extended/Linkage.js +70 -0
  67. package/cjs/extended/Map.js +204 -0
  68. package/cjs/extended/OptionBool.js +76 -0
  69. package/cjs/extended/Range.js +42 -0
  70. package/cjs/extended/RangeInclusive.js +17 -0
  71. package/cjs/extended/Type.js +25 -0
  72. package/cjs/extended/U8aFixed.js +46 -0
  73. package/cjs/extended/WrapperKeepOpaque.js +103 -0
  74. package/cjs/extended/WrapperOpaque.js +23 -0
  75. package/cjs/extended/index.js +32 -0
  76. package/cjs/index.js +5 -0
  77. package/cjs/native/Bool.js +113 -0
  78. package/cjs/native/Date.js +144 -0
  79. package/cjs/native/Float.js +111 -0
  80. package/cjs/native/Json.js +121 -0
  81. package/cjs/native/Raw.js +144 -0
  82. package/cjs/native/Set.js +219 -0
  83. package/cjs/native/Struct.data.js +4 -0
  84. package/cjs/native/Struct.js +264 -0
  85. package/cjs/native/Text.js +154 -0
  86. package/cjs/native/index.js +22 -0
  87. package/cjs/package.json +3 -0
  88. package/cjs/packageDetect.js +5 -0
  89. package/cjs/packageInfo.js +4 -0
  90. package/cjs/primitive/F32.js +14 -0
  91. package/cjs/primitive/F64.js +14 -0
  92. package/cjs/primitive/I128.js +14 -0
  93. package/cjs/primitive/I16.js +14 -0
  94. package/cjs/primitive/I256.js +14 -0
  95. package/cjs/primitive/I32.js +14 -0
  96. package/cjs/primitive/I64.js +14 -0
  97. package/cjs/primitive/I8.js +14 -0
  98. package/cjs/primitive/ISize.js +18 -0
  99. package/cjs/primitive/U128.js +14 -0
  100. package/cjs/primitive/U16.js +14 -0
  101. package/cjs/primitive/U256.js +14 -0
  102. package/cjs/primitive/U32.js +14 -0
  103. package/cjs/primitive/U64.js +14 -0
  104. package/cjs/primitive/U8.js +14 -0
  105. package/cjs/primitive/USize.js +18 -0
  106. package/cjs/primitive/index.js +51 -0
  107. package/{build → cjs}/types/codec.d.ts +1 -1
  108. package/cjs/types/codec.js +2 -0
  109. package/cjs/types/helpers.js +2 -0
  110. package/cjs/types/index.js +7 -0
  111. package/cjs/types/interfaces.js +2 -0
  112. package/cjs/types/registry.js +2 -0
  113. package/cjs/utils/compareArray.js +13 -0
  114. package/cjs/utils/compareMap.js +30 -0
  115. package/cjs/utils/compareSet.js +20 -0
  116. package/cjs/utils/decodeU8a.js +105 -0
  117. package/cjs/utils/index.js +25 -0
  118. package/cjs/utils/sanitize.js +233 -0
  119. package/cjs/utils/sortValues.js +84 -0
  120. package/cjs/utils/toConstructors.js +40 -0
  121. package/cjs/utils/typesToMap.js +10 -0
  122. package/cjs/utils/util.js +7 -0
  123. package/extended/BTreeMap.d.ts +5 -0
  124. package/extended/BTreeMap.js +10 -0
  125. package/extended/BTreeSet.d.ts +64 -0
  126. package/extended/BTreeSet.js +185 -0
  127. package/extended/BitVec.d.ts +37 -0
  128. package/extended/BitVec.js +108 -0
  129. package/extended/Bytes.d.ts +29 -0
  130. package/extended/Bytes.js +70 -0
  131. package/extended/HashMap.d.ts +5 -0
  132. package/extended/HashMap.js +10 -0
  133. package/extended/Linkage.d.ts +37 -0
  134. package/extended/Linkage.js +65 -0
  135. package/extended/Map.d.ts +59 -0
  136. package/extended/Map.js +200 -0
  137. package/extended/OptionBool.d.ts +36 -0
  138. package/extended/OptionBool.js +72 -0
  139. package/extended/Range.d.ts +29 -0
  140. package/extended/Range.js +38 -0
  141. package/extended/RangeInclusive.d.ts +6 -0
  142. package/extended/RangeInclusive.js +13 -0
  143. package/extended/Type.d.ts +16 -0
  144. package/extended/Type.js +21 -0
  145. package/extended/U8aFixed.d.ts +16 -0
  146. package/extended/U8aFixed.js +42 -0
  147. package/extended/WrapperKeepOpaque.d.ts +40 -0
  148. package/extended/WrapperKeepOpaque.js +99 -0
  149. package/extended/WrapperOpaque.d.ts +10 -0
  150. package/extended/WrapperOpaque.js +19 -0
  151. package/{src/extended/index.ts → extended/index.d.ts} +0 -3
  152. package/extended/index.js +14 -0
  153. package/index.d.ts +2 -0
  154. package/index.js +2 -0
  155. package/native/Bool.d.ts +71 -0
  156. package/native/Bool.js +109 -0
  157. package/native/Date.d.ts +84 -0
  158. package/native/Date.js +140 -0
  159. package/native/Float.d.ts +68 -0
  160. package/native/Float.js +107 -0
  161. package/native/Json.d.ts +69 -0
  162. package/native/Json.js +117 -0
  163. package/native/Raw.d.ts +87 -0
  164. package/native/Raw.js +140 -0
  165. package/native/Set.d.ts +84 -0
  166. package/native/Set.js +215 -0
  167. package/native/Struct.d.ts +106 -0
  168. package/{src/native/Struct.data.ts → native/Struct.data.js} +0 -3
  169. package/native/Struct.js +260 -0
  170. package/native/Text.d.ts +77 -0
  171. package/native/Text.js +150 -0
  172. package/{src/native/index.ts → native/index.d.ts} +0 -3
  173. package/native/index.js +8 -0
  174. package/package.json +1126 -11
  175. package/packageDetect.d.ts +1 -0
  176. package/packageDetect.js +3 -0
  177. package/packageInfo.d.ts +6 -0
  178. package/packageInfo.js +1 -0
  179. package/primitive/F32.d.ts +11 -0
  180. package/primitive/F32.js +10 -0
  181. package/primitive/F64.d.ts +11 -0
  182. package/primitive/F64.js +10 -0
  183. package/primitive/I128.d.ts +11 -0
  184. package/primitive/I128.js +10 -0
  185. package/primitive/I16.d.ts +11 -0
  186. package/primitive/I16.js +10 -0
  187. package/primitive/I256.d.ts +11 -0
  188. package/primitive/I256.js +10 -0
  189. package/primitive/I32.d.ts +11 -0
  190. package/primitive/I32.js +10 -0
  191. package/primitive/I64.d.ts +11 -0
  192. package/primitive/I64.js +10 -0
  193. package/primitive/I8.d.ts +11 -0
  194. package/primitive/I8.js +10 -0
  195. package/primitive/ISize.d.ts +12 -0
  196. package/primitive/ISize.js +14 -0
  197. package/primitive/U128.d.ts +11 -0
  198. package/primitive/U128.js +10 -0
  199. package/primitive/U16.d.ts +11 -0
  200. package/primitive/U16.js +10 -0
  201. package/primitive/U256.d.ts +11 -0
  202. package/primitive/U256.js +10 -0
  203. package/primitive/U32.d.ts +11 -0
  204. package/primitive/U32.js +10 -0
  205. package/primitive/U64.d.ts +11 -0
  206. package/primitive/U64.js +10 -0
  207. package/primitive/U8.d.ts +11 -0
  208. package/primitive/U8.js +10 -0
  209. package/primitive/USize.d.ts +12 -0
  210. package/primitive/USize.js +14 -0
  211. package/{src/primitive/index.ts → primitive/index.d.ts} +0 -3
  212. package/primitive/index.js +16 -0
  213. package/types/codec.d.ts +113 -0
  214. package/types/codec.js +1 -0
  215. package/{src/types/helpers.ts → types/helpers.d.ts} +8 -31
  216. package/types/helpers.js +1 -0
  217. package/{src/types/index.ts → types/index.d.ts} +0 -3
  218. package/types/index.js +4 -0
  219. package/types/interfaces.d.ts +74 -0
  220. package/types/interfaces.js +1 -0
  221. package/types/registry.d.ts +67 -0
  222. package/types/registry.js +1 -0
  223. package/utils/compareArray.d.ts +1 -0
  224. package/utils/compareArray.js +10 -0
  225. package/utils/compareMap.d.ts +1 -0
  226. package/utils/compareMap.js +27 -0
  227. package/utils/compareSet.d.ts +1 -0
  228. package/utils/compareSet.js +17 -0
  229. package/utils/decodeU8a.d.ts +26 -0
  230. package/utils/decodeU8a.js +100 -0
  231. package/{src/utils/index.ts → utils/index.d.ts} +0 -3
  232. package/utils/index.js +8 -0
  233. package/utils/sanitize.d.ts +15 -0
  234. package/utils/sanitize.js +219 -0
  235. package/utils/sortValues.d.ts +12 -0
  236. package/utils/sortValues.js +79 -0
  237. package/utils/toConstructors.d.ts +16 -0
  238. package/utils/toConstructors.js +35 -0
  239. package/utils/typesToMap.d.ts +2 -0
  240. package/utils/typesToMap.js +7 -0
  241. package/utils/util.d.ts +3 -0
  242. package/utils/util.js +4 -0
  243. package/src/abstract/Array.ts +0 -213
  244. package/src/abstract/Base.ts +0 -129
  245. package/src/abstract/Int.ts +0 -271
  246. package/src/abstract/Object.ts +0 -99
  247. package/src/base/Compact.spec.ts +0 -99
  248. package/src/base/Compact.ts +0 -198
  249. package/src/base/DoNotConstruct.spec.ts +0 -23
  250. package/src/base/DoNotConstruct.ts +0 -118
  251. package/src/base/Enum.spec.ts +0 -487
  252. package/src/base/Enum.ts +0 -460
  253. package/src/base/Int.spec.ts +0 -225
  254. package/src/base/Int.ts +0 -34
  255. package/src/base/Null.spec.ts +0 -41
  256. package/src/base/Null.ts +0 -96
  257. package/src/base/Option.spec.ts +0 -216
  258. package/src/base/Option.ts +0 -275
  259. package/src/base/Result.spec.ts +0 -64
  260. package/src/base/Result.ts +0 -79
  261. package/src/base/Tuple.spec.ts +0 -161
  262. package/src/base/Tuple.ts +0 -149
  263. package/src/base/UInt.spec.ts +0 -192
  264. package/src/base/UInt.ts +0 -30
  265. package/src/base/Vec.spec.ts +0 -224
  266. package/src/base/Vec.ts +0 -133
  267. package/src/base/VecAny.ts +0 -23
  268. package/src/base/VecFixed.spec.ts +0 -78
  269. package/src/base/VecFixed.ts +0 -92
  270. package/src/checkTypes.manual.ts +0 -12
  271. package/src/extended/BTreeMap.spec.ts +0 -245
  272. package/src/extended/BTreeMap.ts +0 -16
  273. package/src/extended/BTreeSet.spec.ts +0 -260
  274. package/src/extended/BTreeSet.ts +0 -233
  275. package/src/extended/BitVec.spec.ts +0 -97
  276. package/src/extended/BitVec.ts +0 -137
  277. package/src/extended/Bytes.spec.ts +0 -75
  278. package/src/extended/Bytes.ts +0 -88
  279. package/src/extended/HashMap.spec.ts +0 -36
  280. package/src/extended/HashMap.ts +0 -16
  281. package/src/extended/Linkage.spec.ts +0 -43
  282. package/src/extended/Linkage.ts +0 -81
  283. package/src/extended/Map.spec.ts +0 -123
  284. package/src/extended/Map.ts +0 -255
  285. package/src/extended/OptionBool.spec.ts +0 -49
  286. package/src/extended/OptionBool.ts +0 -93
  287. package/src/extended/Range.spec.ts +0 -37
  288. package/src/extended/Range.ts +0 -56
  289. package/src/extended/RangeInclusive.ts +0 -20
  290. package/src/extended/Type.spec.ts +0 -118
  291. package/src/extended/Type.ts +0 -29
  292. package/src/extended/U8aFixed.spec.ts +0 -117
  293. package/src/extended/U8aFixed.ts +0 -57
  294. package/src/extended/WrapperKeepOpaque.spec.ts +0 -101
  295. package/src/extended/WrapperKeepOpaque.ts +0 -128
  296. package/src/extended/WrapperOpaque.spec.ts +0 -58
  297. package/src/extended/WrapperOpaque.ts +0 -27
  298. package/src/index.ts +0 -6
  299. package/src/mod.ts +0 -4
  300. package/src/native/Bool.spec.ts +0 -74
  301. package/src/native/Bool.ts +0 -137
  302. package/src/native/Date.spec.ts +0 -85
  303. package/src/native/Date.ts +0 -169
  304. package/src/native/Float.spec.ts +0 -51
  305. package/src/native/Float.ts +0 -136
  306. package/src/native/Json.ts +0 -147
  307. package/src/native/Raw.spec.ts +0 -113
  308. package/src/native/Raw.ts +0 -171
  309. package/src/native/Set.spec.ts +0 -116
  310. package/src/native/Set.ts +0 -269
  311. package/src/native/Struct.spec.ts +0 -411
  312. package/src/native/Struct.ts +0 -338
  313. package/src/native/Text.spec.ts +0 -85
  314. package/src/native/Text.ts +0 -184
  315. package/src/packageDetect.ts +0 -11
  316. package/src/packageInfo.ts +0 -6
  317. package/src/primitive/F32.ts +0 -14
  318. package/src/primitive/F64.ts +0 -14
  319. package/src/primitive/I128.ts +0 -14
  320. package/src/primitive/I16.ts +0 -14
  321. package/src/primitive/I256.ts +0 -14
  322. package/src/primitive/I32.ts +0 -14
  323. package/src/primitive/I64.ts +0 -14
  324. package/src/primitive/I8.ts +0 -14
  325. package/src/primitive/ISize.ts +0 -21
  326. package/src/primitive/U128.ts +0 -14
  327. package/src/primitive/U16.ts +0 -14
  328. package/src/primitive/U256.ts +0 -14
  329. package/src/primitive/U32.ts +0 -14
  330. package/src/primitive/U64.ts +0 -14
  331. package/src/primitive/U8.ts +0 -14
  332. package/src/primitive/USize.ts +0 -21
  333. package/src/test/performance.ts +0 -61
  334. package/src/types/codec.ts +0 -140
  335. package/src/types/interfaces.ts +0 -98
  336. package/src/types/registry.ts +0 -86
  337. package/src/utils/compareArray.ts +0 -22
  338. package/src/utils/compareMap.ts +0 -40
  339. package/src/utils/compareSet.ts +0 -23
  340. package/src/utils/decodeU8a.ts +0 -123
  341. package/src/utils/sanitize.spec.ts +0 -89
  342. package/src/utils/sanitize.ts +0 -290
  343. package/src/utils/sortValues.ts +0 -103
  344. package/src/utils/toConstructors.ts +0 -46
  345. package/src/utils/typesToMap.ts +0 -14
  346. package/src/utils/util.ts +0 -8
  347. package/tsconfig.build.json +0 -16
  348. package/tsconfig.build.tsbuildinfo +0 -1
  349. package/tsconfig.spec.json +0 -21
  350. /package/{build/abstract → abstract}/Array.d.ts +0 -0
  351. /package/{build/abstract → abstract}/Base.d.ts +0 -0
  352. /package/{build/abstract → abstract}/Int.d.ts +0 -0
  353. /package/{build/abstract → abstract}/Object.d.ts +0 -0
  354. /package/{build/abstract → abstract}/index.d.ts +0 -0
  355. /package/{build/base → base}/Compact.d.ts +0 -0
  356. /package/{build/base → base}/DoNotConstruct.d.ts +0 -0
  357. /package/{build/base → base}/Enum.d.ts +0 -0
  358. /package/{build/base → base}/Null.d.ts +0 -0
  359. /package/{build/base → base}/Option.d.ts +0 -0
  360. /package/{build/base → base}/Result.d.ts +0 -0
  361. /package/{build/base → base}/Tuple.d.ts +0 -0
  362. /package/{build/base → base}/Vec.d.ts +0 -0
  363. /package/{build/base → base}/VecAny.d.ts +0 -0
  364. /package/{build/base → base}/VecFixed.d.ts +0 -0
  365. /package/{build/base → base}/index.d.ts +0 -0
  366. /package/{build/bundle.d.ts → bundle.d.ts} +0 -0
  367. /package/{build → cjs}/extended/BTreeMap.d.ts +0 -0
  368. /package/{build → cjs}/extended/BTreeSet.d.ts +0 -0
  369. /package/{build → cjs}/extended/BitVec.d.ts +0 -0
  370. /package/{build → cjs}/extended/Bytes.d.ts +0 -0
  371. /package/{build → cjs}/extended/HashMap.d.ts +0 -0
  372. /package/{build → cjs}/extended/Linkage.d.ts +0 -0
  373. /package/{build → cjs}/extended/Map.d.ts +0 -0
  374. /package/{build → cjs}/extended/OptionBool.d.ts +0 -0
  375. /package/{build → cjs}/extended/Range.d.ts +0 -0
  376. /package/{build → cjs}/extended/RangeInclusive.d.ts +0 -0
  377. /package/{build → cjs}/extended/Type.d.ts +0 -0
  378. /package/{build → cjs}/extended/U8aFixed.d.ts +0 -0
  379. /package/{build → cjs}/extended/WrapperKeepOpaque.d.ts +0 -0
  380. /package/{build → cjs}/extended/WrapperOpaque.d.ts +0 -0
  381. /package/{build → cjs}/extended/index.d.ts +0 -0
  382. /package/{build → cjs}/index.d.ts +0 -0
  383. /package/{build → cjs}/native/Bool.d.ts +0 -0
  384. /package/{build → cjs}/native/Date.d.ts +0 -0
  385. /package/{build → cjs}/native/Float.d.ts +0 -0
  386. /package/{build → cjs}/native/Json.d.ts +0 -0
  387. /package/{build → cjs}/native/Raw.d.ts +0 -0
  388. /package/{build → cjs}/native/Set.d.ts +0 -0
  389. /package/{build → cjs}/native/Struct.d.ts +0 -0
  390. /package/{build → cjs}/native/Text.d.ts +0 -0
  391. /package/{build → cjs}/native/index.d.ts +0 -0
  392. /package/{build → cjs}/packageDetect.d.ts +0 -0
  393. /package/{build → cjs}/packageInfo.d.ts +0 -0
  394. /package/{build → cjs}/primitive/F32.d.ts +0 -0
  395. /package/{build → cjs}/primitive/F64.d.ts +0 -0
  396. /package/{build → cjs}/primitive/I128.d.ts +0 -0
  397. /package/{build → cjs}/primitive/I16.d.ts +0 -0
  398. /package/{build → cjs}/primitive/I256.d.ts +0 -0
  399. /package/{build → cjs}/primitive/I32.d.ts +0 -0
  400. /package/{build → cjs}/primitive/I64.d.ts +0 -0
  401. /package/{build → cjs}/primitive/I8.d.ts +0 -0
  402. /package/{build → cjs}/primitive/ISize.d.ts +0 -0
  403. /package/{build → cjs}/primitive/U128.d.ts +0 -0
  404. /package/{build → cjs}/primitive/U16.d.ts +0 -0
  405. /package/{build → cjs}/primitive/U256.d.ts +0 -0
  406. /package/{build → cjs}/primitive/U32.d.ts +0 -0
  407. /package/{build → cjs}/primitive/U64.d.ts +0 -0
  408. /package/{build → cjs}/primitive/U8.d.ts +0 -0
  409. /package/{build → cjs}/primitive/USize.d.ts +0 -0
  410. /package/{build → cjs}/primitive/index.d.ts +0 -0
  411. /package/{build → cjs}/types/helpers.d.ts +0 -0
  412. /package/{build → cjs}/types/index.d.ts +0 -0
  413. /package/{build → cjs}/types/interfaces.d.ts +0 -0
  414. /package/{build → cjs}/types/registry.d.ts +0 -0
  415. /package/{build → cjs}/utils/compareArray.d.ts +0 -0
  416. /package/{build → cjs}/utils/compareMap.d.ts +0 -0
  417. /package/{build → cjs}/utils/compareSet.d.ts +0 -0
  418. /package/{build → cjs}/utils/decodeU8a.d.ts +0 -0
  419. /package/{build → cjs}/utils/index.d.ts +0 -0
  420. /package/{build → cjs}/utils/sanitize.d.ts +0 -0
  421. /package/{build → cjs}/utils/sortValues.d.ts +0 -0
  422. /package/{build → cjs}/utils/toConstructors.d.ts +0 -0
  423. /package/{build → cjs}/utils/typesToMap.d.ts +0 -0
  424. /package/{build → cjs}/utils/util.d.ts +0 -0
package/native/Set.js ADDED
@@ -0,0 +1,215 @@
1
+ import { BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringify, stringPascalCase, u8aToBn, u8aToHex, u8aToU8a } from '@pezkuwi/util';
2
+ import { compareArray } from '../utils/index.js';
3
+ function encodeSet(setValues, values) {
4
+ const encoded = new BN(0);
5
+ for (let i = 0, count = values.length; i < count; i++) {
6
+ encoded.ior(bnToBn(setValues[values[i]] || 0));
7
+ }
8
+ return encoded;
9
+ }
10
+ /** @internal */
11
+ function decodeSetArray(setValues, values) {
12
+ const count = values.length;
13
+ const result = new Array(count);
14
+ for (let i = 0; i < count; i++) {
15
+ const key = values[i];
16
+ if (isUndefined(setValues[key])) {
17
+ throw new Error(`Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
18
+ }
19
+ result[i] = key;
20
+ }
21
+ return result;
22
+ }
23
+ /** @internal */
24
+ function decodeSetNumber(setValues, _value) {
25
+ const bn = bnToBn(_value);
26
+ const keys = Object.keys(setValues);
27
+ const result = [];
28
+ for (let i = 0, count = keys.length; i < count; i++) {
29
+ const key = keys[i];
30
+ if (bn.and(bnToBn(setValues[key])).eq(bnToBn(setValues[key]))) {
31
+ result.push(key);
32
+ }
33
+ }
34
+ const computed = encodeSet(setValues, result);
35
+ if (!bn.eq(computed)) {
36
+ throw new Error(`Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
37
+ }
38
+ return result;
39
+ }
40
+ /** @internal */
41
+ function decodeSet(setValues, value = 0, bitLength) {
42
+ if (bitLength % 8 !== 0) {
43
+ throw new Error(`Expected valid bitLength, power of 8, found ${bitLength}`);
44
+ }
45
+ const byteLength = bitLength / 8;
46
+ if (isU8a(value)) {
47
+ return value.length === 0
48
+ ? []
49
+ : decodeSetNumber(setValues, u8aToBn(value.subarray(0, byteLength), { isLe: true }));
50
+ }
51
+ else if (isString(value)) {
52
+ return decodeSet(setValues, u8aToU8a(value), byteLength);
53
+ }
54
+ else if (value instanceof Set || Array.isArray(value)) {
55
+ const input = Array.isArray(value)
56
+ ? value
57
+ : [...value.values()];
58
+ return decodeSetArray(setValues, input);
59
+ }
60
+ return decodeSetNumber(setValues, value);
61
+ }
62
+ /**
63
+ * @name Set
64
+ * @description
65
+ * An Set is an array of string values, represented an an encoded type by
66
+ * a bitwise representation of the values.
67
+ */
68
+ export class CodecSet extends Set {
69
+ registry;
70
+ createdAtHash;
71
+ initialU8aLength;
72
+ isStorageFallback;
73
+ #allowed;
74
+ #byteLength;
75
+ constructor(registry, setValues, value, bitLength = 8) {
76
+ super(decodeSet(setValues, value, bitLength));
77
+ this.registry = registry;
78
+ this.#allowed = setValues;
79
+ this.#byteLength = bitLength / 8;
80
+ }
81
+ static with(values, bitLength) {
82
+ return class extends CodecSet {
83
+ static {
84
+ const keys = Object.keys(values);
85
+ const count = keys.length;
86
+ const isKeys = new Array(count);
87
+ for (let i = 0; i < count; i++) {
88
+ isKeys[i] = `is${stringPascalCase(keys[i])}`;
89
+ }
90
+ objectProperties(this.prototype, isKeys, (_, i, self) => self.strings.includes(keys[i]));
91
+ }
92
+ constructor(registry, value) {
93
+ super(registry, values, value, bitLength);
94
+ }
95
+ };
96
+ }
97
+ /**
98
+ * @description The length of the value when encoded as a Uint8Array
99
+ */
100
+ get encodedLength() {
101
+ return this.#byteLength;
102
+ }
103
+ /**
104
+ * @description returns a hash of the contents
105
+ */
106
+ get hash() {
107
+ return this.registry.hash(this.toU8a());
108
+ }
109
+ /**
110
+ * @description true is the Set contains no values
111
+ */
112
+ get isEmpty() {
113
+ return this.size === 0;
114
+ }
115
+ /**
116
+ * @description The actual set values as a string[]
117
+ */
118
+ get strings() {
119
+ return [...super.values()];
120
+ }
121
+ /**
122
+ * @description The encoded value for the set members
123
+ */
124
+ get valueEncoded() {
125
+ return encodeSet(this.#allowed, this.strings);
126
+ }
127
+ /**
128
+ * @description adds a value to the Set (extended to allow for validity checking)
129
+ */
130
+ add = (key) => {
131
+ // ^^^ add = () property done to assign this instance's this, otherwise Set.add creates "some" chaos
132
+ // we have the isUndefined(this._setValues) in here as well, add is used internally
133
+ // in the Set constructor (so it is undefined at this point, and should allow)
134
+ if (this.#allowed && isUndefined(this.#allowed[key])) {
135
+ throw new Error(`Set: Invalid key '${key}' on add`);
136
+ }
137
+ super.add(key);
138
+ return this;
139
+ };
140
+ /**
141
+ * @description Compares the value of the input to see if there is a match
142
+ */
143
+ eq(other) {
144
+ if (Array.isArray(other)) {
145
+ // we don't actually care about the order, sort the values
146
+ return compareArray(this.strings.sort(), other.sort());
147
+ }
148
+ else if (other instanceof Set) {
149
+ return this.eq([...other.values()]);
150
+ }
151
+ else if (isNumber(other) || isBn(other)) {
152
+ return this.valueEncoded.eq(bnToBn(other));
153
+ }
154
+ return false;
155
+ }
156
+ /**
157
+ * @description Returns a breakdown of the hex encoding for this Codec
158
+ */
159
+ inspect() {
160
+ return {
161
+ outer: [this.toU8a()]
162
+ };
163
+ }
164
+ /**
165
+ * @description Returns a hex string representation of the value
166
+ */
167
+ toHex() {
168
+ return u8aToHex(this.toU8a());
169
+ }
170
+ /**
171
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
172
+ */
173
+ toHuman() {
174
+ return this.toJSON();
175
+ }
176
+ /**
177
+ * @description Converts the Object to JSON, typically used for RPC transfers
178
+ */
179
+ toJSON() {
180
+ return this.strings;
181
+ }
182
+ /**
183
+ * @description The encoded value for the set members
184
+ */
185
+ toNumber() {
186
+ return this.valueEncoded.toNumber();
187
+ }
188
+ /**
189
+ * @description Converts the value in a best-fit primitive form
190
+ */
191
+ toPrimitive() {
192
+ return this.toJSON();
193
+ }
194
+ /**
195
+ * @description Returns the base runtime type name for this instance
196
+ */
197
+ toRawType() {
198
+ return stringify({ _set: this.#allowed });
199
+ }
200
+ /**
201
+ * @description Returns the string representation of the value
202
+ */
203
+ toString() {
204
+ return `[${this.strings.join(', ')}]`;
205
+ }
206
+ /**
207
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
208
+ */
209
+ toU8a(_isBare) {
210
+ return bnToU8a(this.valueEncoded, {
211
+ bitLength: this.#byteLength * 8,
212
+ isLe: true
213
+ });
214
+ }
215
+ }
@@ -0,0 +1,106 @@
1
+ import type { HexString } from '@pezkuwi/util/types';
2
+ import type { AnyJson, BareOpts, Codec, CodecClass, DefinitionSetter, Inspect, IStruct, IU8a, Registry } from '../types/index.js';
3
+ type TypesDef<T = Codec> = Record<string, string | CodecClass<T>>;
4
+ type Definition = [CodecClass[], string[]];
5
+ /**
6
+ * @name Struct
7
+ * @description
8
+ * A Struct defines an Object with key-value pairs - where the values are Codec values. It removes
9
+ * a lot of repetition from the actual coding, define a structure type, pass it the key/Codec
10
+ * values in the constructor and it manages the decoding. It is important that the constructor
11
+ * values matches 100% to the order in th Rust code, i.e. don't go crazy and make it alphabetical,
12
+ * it needs to decoded in the specific defined order.
13
+ * @noInheritDoc
14
+ */
15
+ export declare class Struct<S extends TypesDef = TypesDef, V extends {
16
+ [K in keyof S]: any;
17
+ } = {
18
+ [K in keyof S]: any;
19
+ }, E extends {
20
+ [K in keyof S]: string;
21
+ } = {
22
+ [K in keyof S]: string;
23
+ }> extends Map<keyof S, Codec> implements IStruct<keyof S> {
24
+ #private;
25
+ readonly registry: Registry;
26
+ createdAtHash?: IU8a | undefined;
27
+ initialU8aLength?: number;
28
+ isStorageFallback?: boolean;
29
+ constructor(registry: Registry, Types: S, value?: V | Map<unknown, unknown> | unknown[] | HexString | null, jsonMap?: Map<string, string>, { definition, setDefinition }?: DefinitionSetter<Definition>);
30
+ static with<S extends TypesDef>(Types: S, jsonMap?: Map<string, string>): CodecClass<Struct<S>>;
31
+ /**
32
+ * @description The available keys for this struct
33
+ */
34
+ get defKeys(): string[];
35
+ /**
36
+ * @description Checks if the value is an empty value '{}'
37
+ */
38
+ get isEmpty(): boolean;
39
+ /**
40
+ * @description The length of the value when encoded as a Uint8Array
41
+ */
42
+ get encodedLength(): number;
43
+ /**
44
+ * @description returns a hash of the contents
45
+ */
46
+ get hash(): IU8a;
47
+ /**
48
+ * @description Returns the Type description of the structure
49
+ */
50
+ get Type(): E;
51
+ /**
52
+ * @description Compares the value of the input to see if there is a match
53
+ */
54
+ eq(other?: unknown): boolean;
55
+ /**
56
+ * @description Returns a specific names entry in the structure
57
+ * @param key The name of the entry to retrieve
58
+ */
59
+ get(key: keyof S): Codec | undefined;
60
+ /**
61
+ * @description Returns the values of a member at a specific index (Rather use get(name) for performance)
62
+ */
63
+ getAtIndex(index: number): Codec;
64
+ /**
65
+ * @description Returns the a types value by name
66
+ */
67
+ getT<T = Codec>(key: string): T;
68
+ /**
69
+ * @description Returns a breakdown of the hex encoding for this Codec
70
+ */
71
+ inspect(isBare?: BareOpts): Inspect;
72
+ /**
73
+ * @description Converts the Object to an standard JavaScript Array
74
+ */
75
+ toArray(): Codec[];
76
+ /**
77
+ * @description Returns a hex string representation of the value
78
+ */
79
+ toHex(): HexString;
80
+ /**
81
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
82
+ */
83
+ toHuman(isExtended?: boolean, disableAscii?: boolean): Record<string, AnyJson>;
84
+ /**
85
+ * @description Converts the Object to JSON, typically used for RPC transfers
86
+ */
87
+ toJSON(): Record<string, AnyJson>;
88
+ /**
89
+ * @description Converts the value in a best-fit primitive form
90
+ */
91
+ toPrimitive(disableAscii?: boolean): Record<string, AnyJson>;
92
+ /**
93
+ * @description Returns the base runtime type name for this instance
94
+ */
95
+ toRawType(): string;
96
+ /**
97
+ * @description Returns the string representation of the value
98
+ */
99
+ toString(): string;
100
+ /**
101
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
102
+ * @param isBare true when the value has none of the type-specific prefixes (internal)
103
+ */
104
+ toU8a(isBare?: BareOpts): Uint8Array;
105
+ }
106
+ export {};
@@ -1,4 +1 @@
1
- // Copyright 2017-2025 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
1
  export const TEST_A = '0x0000000000048670f76b10bd81bf93b0b420ad46c209d1183202abcdfce1b0e13108ccf4020000000000000000000000000000000000000000000000000000000000000000000088b116afe3b5020000000000000001000000000000000000000000000000420d0300030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060203040506020304050602030405060202';