@pendle/core-v2 4.5.2 → 4.6.0

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 (129) hide show
  1. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ethena/PendleSUSDESY.sol/PendleSUSDESY.dbg.json +1 -1
  2. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ethena/PendleSUSDESY.sol/PendleSUSDESY.json +2 -2
  3. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultERC20SY.sol/PendleKarakVaultERC20SY.dbg.json +4 -0
  4. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultERC20SY.sol/PendleKarakVaultERC20SY.json +1070 -0
  5. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultEzETHSY.sol/PendleKarakVaultEzETHSY.dbg.json +4 -0
  6. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultEzETHSY.sol/PendleKarakVaultEzETHSY.json +1144 -0
  7. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSUSDESY.sol/PendleKarakVaultSUSDESY.dbg.json +4 -0
  8. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSUSDESY.sol/PendleKarakVaultSUSDESY.json +1111 -0
  9. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSYBaseUpg.sol/PendleKarakVaultSYBaseUpg.dbg.json +4 -0
  10. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSYBaseUpg.sol/PendleKarakVaultSYBaseUpg.json +1036 -0
  11. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultUSDESY.sol/PendleKarakVaultUSDESY.dbg.json +4 -0
  12. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultUSDESY.sol/PendleKarakVaultUSDESY.json +1096 -0
  13. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultWEETHSY.sol/PendleKarakVaultWEETHSY.dbg.json +4 -0
  14. package/build/artifacts/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultWEETHSY.sol/PendleKarakVaultWEETHSY.json +1116 -0
  15. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626SY.sol/PendleERC4626SY.dbg.json +1 -1
  16. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626SY.sol/PendleERC4626SY.json +2 -2
  17. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626UpgSY.sol/PendleERC4626SYUpg.dbg.json +1 -1
  18. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC4626UpgSY.sol/PendleERC4626SYUpg.json +2 -2
  19. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.dbg.json +1 -1
  20. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleGdaiSY.sol/PendleGDaiSY.json +2 -2
  21. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.dbg.json +1 -1
  22. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleSfrxEthSY.sol/PendleSfrxEthSY.json +2 -2
  23. package/build/artifacts/contracts/core/StandardizedYield/implementations/PirexETH/PendleApxETHSY.sol/PendleApxETHSY.dbg.json +1 -1
  24. package/build/artifacts/contracts/core/StandardizedYield/implementations/PirexETH/PendleApxETHSY.sol/PendleApxETHSY.json +2 -2
  25. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufStETHSY.sol/PendlePufStETHSY.dbg.json +1 -1
  26. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufStETHSY.sol/PendlePufStETHSY.json +2 -2
  27. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufWETHSY.sol/PendlePufWETHSY.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/StandardizedYield/implementations/Puffer/PendlePufWETHSY.sol/PendlePufWETHSY.json +2 -2
  29. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  30. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.json +19 -0
  31. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.dbg.json +1 -1
  32. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.json +1200 -34
  33. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.dbg.json +1 -1
  34. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.json +1228 -62
  35. package/build/artifacts/contracts/interfaces/IPReflector.sol/IPReflector.dbg.json +4 -0
  36. package/build/artifacts/contracts/interfaces/IPReflector.sol/IPReflector.json +30 -0
  37. package/build/artifacts/contracts/interfaces/IPTokenWithSupplyCap.sol/IPTokenWithSupplyCap.dbg.json +4 -0
  38. package/build/artifacts/contracts/interfaces/IPTokenWithSupplyCap.sol/IPTokenWithSupplyCap.json +37 -0
  39. package/build/artifacts/contracts/interfaces/Karak/IKarakVault.sol/IKarakVault.dbg.json +4 -0
  40. package/build/artifacts/contracts/interfaces/Karak/IKarakVault.sol/IKarakVault.json +24 -0
  41. package/build/artifacts/contracts/interfaces/Karak/IKarakVaultSupervisor.sol/IKarakVaultSupervisor.dbg.json +4 -0
  42. package/build/artifacts/contracts/interfaces/Karak/IKarakVaultSupervisor.sol/IKarakVaultSupervisor.json +76 -0
  43. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.dbg.json +1 -1
  44. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.json +25 -2
  45. package/build/artifacts/contracts/offchain-helpers/SupplyCapReader.sol/IPossibleSupplyCapInterface.dbg.json +1 -1
  46. package/build/artifacts/contracts/offchain-helpers/SupplyCapReader.sol/SupplyCapReader.dbg.json +1 -1
  47. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.dbg.json +1 -1
  48. package/build/artifacts/contracts/router/ActionAddRemoveLiqV3.sol/ActionAddRemoveLiqV3.json +2 -2
  49. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.dbg.json +1 -1
  50. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.json +1202 -36
  51. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.dbg.json +1 -1
  52. package/build/artifacts/contracts/router/ActionSwapPTV3.sol/ActionSwapPTV3.json +2 -2
  53. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.dbg.json +1 -1
  54. package/build/artifacts/contracts/router/ActionSwapYTV3.sol/ActionSwapYTV3.json +2 -2
  55. package/build/artifacts/contracts/router/Reflector.sol/Reflector.dbg.json +4 -0
  56. package/build/artifacts/contracts/router/Reflector.sol/Reflector.json +34 -0
  57. package/build/artifacts/contracts/router/base/ActionBase.sol/ActionBase.dbg.json +1 -1
  58. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultERC20SY.sol +32 -0
  59. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultEzETHSY.sol +80 -0
  60. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSUSDESY.sol +73 -0
  61. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultSYBaseUpg.sol +141 -0
  62. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultUSDESY.sol +18 -0
  63. package/contracts/core/StandardizedYield/implementations/Karak/PendleKarakVaultWEETHSY.sol +71 -0
  64. package/contracts/interfaces/IERC4626.sol +2 -0
  65. package/contracts/interfaces/IPActionMiscV3.sol +99 -0
  66. package/contracts/interfaces/IPReflector.sol +6 -0
  67. package/contracts/interfaces/IPTokenWithSupplyCap.sol +9 -0
  68. package/contracts/interfaces/Karak/IKarakVault.sol +6 -0
  69. package/contracts/interfaces/Karak/IKarakVaultSupervisor.sol +8 -0
  70. package/contracts/offchain-helpers/PendlePoolDeployHelper.sol +5 -0
  71. package/contracts/router/ActionMiscV3.sol +182 -34
  72. package/contracts/router/ActionSwapYTV3.sol +0 -85
  73. package/contracts/router/Reflector.sol +70 -0
  74. package/contracts/router/base/ActionBase.sol +90 -1
  75. package/deployments/1-core.json +10 -1
  76. package/deployments/1-markets/KARAK-SUSDE-MAINNET-SEP2024.json +14 -0
  77. package/deployments/1-markets/KARAK-USDE-MAINNET-SEP2024.json +14 -0
  78. package/deployments/1-markets/KARAK-WEETH-MAINNET-SEP2024.json +14 -0
  79. package/deployments/10-core.json +10 -1
  80. package/deployments/42161-core.json +10 -1
  81. package/deployments/42161-markets/RSETH-ARBITRUM-SEP2024-NEW.json +11 -0
  82. package/deployments/5000-core.json +10 -1
  83. package/deployments/56-core.json +10 -1
  84. package/package.json +1 -1
  85. package/typechain-types/ActionMiscV3.ts +628 -16
  86. package/typechain-types/IERC4626.ts +34 -0
  87. package/typechain-types/IKarakVault.ts +84 -0
  88. package/typechain-types/IKarakVaultSupervisor.ts +190 -0
  89. package/typechain-types/IPActionMiscV3.ts +628 -16
  90. package/typechain-types/IPAllActionV3.ts +535 -0
  91. package/typechain-types/IPReflector.ts +95 -0
  92. package/typechain-types/IPTokenWithSupplyCap.ts +110 -0
  93. package/typechain-types/PendleKarakVaultERC20SY.ts +1324 -0
  94. package/typechain-types/PendleKarakVaultEzETHSY.ts +1400 -0
  95. package/typechain-types/PendleKarakVaultSUSDESY.ts +1380 -0
  96. package/typechain-types/PendleKarakVaultSYBaseUpg.ts +1312 -0
  97. package/typechain-types/PendleKarakVaultUSDESY.ts +1366 -0
  98. package/typechain-types/PendleKarakVaultWEETHSY.ts +1370 -0
  99. package/typechain-types/PendlePoolDeployHelper.ts +44 -0
  100. package/typechain-types/Reflector.ts +95 -0
  101. package/typechain-types/factories/ActionAddRemoveLiqV3__factory.ts +1 -1
  102. package/typechain-types/factories/ActionMiscV3__factory.ts +1201 -35
  103. package/typechain-types/factories/ActionSwapPTV3__factory.ts +1 -1
  104. package/typechain-types/factories/ActionSwapYTV3__factory.ts +1 -1
  105. package/typechain-types/factories/IERC4626__factory.ts +19 -0
  106. package/typechain-types/factories/IKarakVaultSupervisor__factory.ts +95 -0
  107. package/typechain-types/factories/IKarakVault__factory.ts +36 -0
  108. package/typechain-types/factories/IPActionMiscV3__factory.ts +1200 -34
  109. package/typechain-types/factories/IPAllActionV3__factory.ts +1228 -62
  110. package/typechain-types/factories/IPReflector__factory.ts +42 -0
  111. package/typechain-types/factories/IPTokenWithSupplyCap__factory.ts +56 -0
  112. package/typechain-types/factories/PendleApxETHSY__factory.ts +1 -1
  113. package/typechain-types/factories/PendleERC4626SYUpg__factory.ts +1 -1
  114. package/typechain-types/factories/PendleERC4626SY__factory.ts +1 -1
  115. package/typechain-types/factories/PendleGDaiSY__factory.ts +1 -1
  116. package/typechain-types/factories/PendleKarakVaultERC20SY__factory.ts +1139 -0
  117. package/typechain-types/factories/PendleKarakVaultEzETHSY__factory.ts +1236 -0
  118. package/typechain-types/factories/PendleKarakVaultSUSDESY__factory.ts +1180 -0
  119. package/typechain-types/factories/PendleKarakVaultSYBaseUpg__factory.ts +1055 -0
  120. package/typechain-types/factories/PendleKarakVaultUSDESY__factory.ts +1165 -0
  121. package/typechain-types/factories/PendleKarakVaultWEETHSY__factory.ts +1189 -0
  122. package/typechain-types/factories/PendlePoolDeployHelper__factory.ts +24 -1
  123. package/typechain-types/factories/PendlePufStETHSY__factory.ts +1 -1
  124. package/typechain-types/factories/PendlePufWETHSY__factory.ts +1 -1
  125. package/typechain-types/factories/PendleSUSDESY__factory.ts +1 -1
  126. package/typechain-types/factories/PendleSfrxEthSY__factory.ts +1 -1
  127. package/typechain-types/factories/Reflector__factory.ts +84 -0
  128. package/typechain-types/hardhat.d.ts +94 -31
  129. package/typechain-types/index.ts +22 -8
@@ -52,6 +52,7 @@ export interface PendlePoolDeployHelperInterface extends utils.Interface {
52
52
  "deploy5115MarketAndSeedLiquidity(address,(uint32,uint80,int256,int256,bool),address,uint256)": FunctionFragment;
53
53
  "marketFactory()": FunctionFragment;
54
54
  "router()": FunctionFragment;
55
+ "seedLiquidity(address,address,uint256)": FunctionFragment;
55
56
  "yieldContractFactory()": FunctionFragment;
56
57
  };
57
58
 
@@ -69,6 +70,10 @@ export interface PendlePoolDeployHelperInterface extends utils.Interface {
69
70
  values?: undefined
70
71
  ): string;
71
72
  encodeFunctionData(functionFragment: "router", values?: undefined): string;
73
+ encodeFunctionData(
74
+ functionFragment: "seedLiquidity",
75
+ values: [string, string, BigNumberish]
76
+ ): string;
72
77
  encodeFunctionData(
73
78
  functionFragment: "yieldContractFactory",
74
79
  values?: undefined
@@ -83,6 +88,10 @@ export interface PendlePoolDeployHelperInterface extends utils.Interface {
83
88
  data: BytesLike
84
89
  ): Result;
85
90
  decodeFunctionResult(functionFragment: "router", data: BytesLike): Result;
91
+ decodeFunctionResult(
92
+ functionFragment: "seedLiquidity",
93
+ data: BytesLike
94
+ ): Result;
86
95
  decodeFunctionResult(
87
96
  functionFragment: "yieldContractFactory",
88
97
  data: BytesLike
@@ -155,6 +164,13 @@ export interface PendlePoolDeployHelper extends BaseContract {
155
164
 
156
165
  router(overrides?: CallOverrides): Promise<[string]>;
157
166
 
167
+ seedLiquidity(
168
+ market: string,
169
+ tokenToSeedLiqudity: string,
170
+ amountToSeed: BigNumberish,
171
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
172
+ ): Promise<ContractTransaction>;
173
+
158
174
  yieldContractFactory(overrides?: CallOverrides): Promise<[string]>;
159
175
  };
160
176
 
@@ -170,6 +186,13 @@ export interface PendlePoolDeployHelper extends BaseContract {
170
186
 
171
187
  router(overrides?: CallOverrides): Promise<string>;
172
188
 
189
+ seedLiquidity(
190
+ market: string,
191
+ tokenToSeedLiqudity: string,
192
+ amountToSeed: BigNumberish,
193
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
194
+ ): Promise<ContractTransaction>;
195
+
173
196
  yieldContractFactory(overrides?: CallOverrides): Promise<string>;
174
197
 
175
198
  callStatic: {
@@ -187,6 +210,13 @@ export interface PendlePoolDeployHelper extends BaseContract {
187
210
 
188
211
  router(overrides?: CallOverrides): Promise<string>;
189
212
 
213
+ seedLiquidity(
214
+ market: string,
215
+ tokenToSeedLiqudity: string,
216
+ amountToSeed: BigNumberish,
217
+ overrides?: CallOverrides
218
+ ): Promise<void>;
219
+
190
220
  yieldContractFactory(overrides?: CallOverrides): Promise<string>;
191
221
  };
192
222
 
@@ -220,6 +250,13 @@ export interface PendlePoolDeployHelper extends BaseContract {
220
250
 
221
251
  router(overrides?: CallOverrides): Promise<BigNumber>;
222
252
 
253
+ seedLiquidity(
254
+ market: string,
255
+ tokenToSeedLiqudity: string,
256
+ amountToSeed: BigNumberish,
257
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
258
+ ): Promise<BigNumber>;
259
+
223
260
  yieldContractFactory(overrides?: CallOverrides): Promise<BigNumber>;
224
261
  };
225
262
 
@@ -236,6 +273,13 @@ export interface PendlePoolDeployHelper extends BaseContract {
236
273
 
237
274
  router(overrides?: CallOverrides): Promise<PopulatedTransaction>;
238
275
 
276
+ seedLiquidity(
277
+ market: string,
278
+ tokenToSeedLiqudity: string,
279
+ amountToSeed: BigNumberish,
280
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
281
+ ): Promise<PopulatedTransaction>;
282
+
239
283
  yieldContractFactory(
240
284
  overrides?: CallOverrides
241
285
  ): Promise<PopulatedTransaction>;
@@ -0,0 +1,95 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import {
5
+ BaseContract,
6
+ BigNumber,
7
+ BytesLike,
8
+ CallOverrides,
9
+ ContractTransaction,
10
+ Overrides,
11
+ PopulatedTransaction,
12
+ Signer,
13
+ utils,
14
+ } from "ethers";
15
+ import { FunctionFragment, Result } from "@ethersproject/abi";
16
+ import { Listener, Provider } from "@ethersproject/providers";
17
+ import type {
18
+ TypedEventFilter,
19
+ TypedEvent,
20
+ TypedListener,
21
+ OnEvent,
22
+ } from "./common";
23
+
24
+ export interface ReflectorInterface extends utils.Interface {
25
+ contractName: "Reflector";
26
+ functions: {
27
+ "reflect(bytes)": FunctionFragment;
28
+ };
29
+
30
+ encodeFunctionData(functionFragment: "reflect", values: [BytesLike]): string;
31
+
32
+ decodeFunctionResult(functionFragment: "reflect", data: BytesLike): Result;
33
+
34
+ events: {};
35
+ }
36
+
37
+ export interface Reflector extends BaseContract {
38
+ contractName: "Reflector";
39
+ connect(signerOrProvider: Signer | Provider | string): this;
40
+ attach(addressOrName: string): this;
41
+ deployed(): Promise<this>;
42
+
43
+ interface: ReflectorInterface;
44
+
45
+ queryFilter<TEvent extends TypedEvent>(
46
+ event: TypedEventFilter<TEvent>,
47
+ fromBlockOrBlockhash?: string | number | undefined,
48
+ toBlock?: string | number | undefined
49
+ ): Promise<Array<TEvent>>;
50
+
51
+ listeners<TEvent extends TypedEvent>(
52
+ eventFilter?: TypedEventFilter<TEvent>
53
+ ): Array<TypedListener<TEvent>>;
54
+ listeners(eventName?: string): Array<Listener>;
55
+ removeAllListeners<TEvent extends TypedEvent>(
56
+ eventFilter: TypedEventFilter<TEvent>
57
+ ): this;
58
+ removeAllListeners(eventName?: string): this;
59
+ off: OnEvent<this>;
60
+ on: OnEvent<this>;
61
+ once: OnEvent<this>;
62
+ removeListener: OnEvent<this>;
63
+
64
+ functions: {
65
+ reflect(
66
+ inputData: BytesLike,
67
+ overrides?: Overrides & { from?: string | Promise<string> }
68
+ ): Promise<ContractTransaction>;
69
+ };
70
+
71
+ reflect(
72
+ inputData: BytesLike,
73
+ overrides?: Overrides & { from?: string | Promise<string> }
74
+ ): Promise<ContractTransaction>;
75
+
76
+ callStatic: {
77
+ reflect(inputData: BytesLike, overrides?: CallOverrides): Promise<string>;
78
+ };
79
+
80
+ filters: {};
81
+
82
+ estimateGas: {
83
+ reflect(
84
+ inputData: BytesLike,
85
+ overrides?: Overrides & { from?: string | Promise<string> }
86
+ ): Promise<BigNumber>;
87
+ };
88
+
89
+ populateTransaction: {
90
+ reflect(
91
+ inputData: BytesLike,
92
+ overrides?: Overrides & { from?: string | Promise<string> }
93
+ ): Promise<PopulatedTransaction>;
94
+ };
95
+ }
@@ -2689,7 +2689,7 @@ const _abi = [
2689
2689
  ];
2690
2690
 
2691
2691
  const _bytecode =
2692
- "0x6080806040523461001757615a4f90816200001d8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816312599ac614611c7c575080632756ce0614611a395780633dbe1c55146119225780634e390267146116bb57806358bda475146113fe57806360da086014610ea45780636b77ac9e14610c11578063844384aa14610b2b57806397ee279e14610935578063b00f09d714610737578063b7d75b8b146105cd5763d13b4fdc146100a357600080fd5b346102e2576100b136612048565b91809391936105b3575b6000926040517f2f13b60c0000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b0388165afa9081156102ef57600091610584575b50156103625750604051630b2339af60e21b81526060816004816001600160a01b0387165afa80156102ef576001600160a01b0391600091610330575b5016604051907ff6b911bc0000000000000000000000000000000000000000000000000000000082526040828061019c86858c600485016040919493929460608201956001600160a01b0380921683521660208201520152565b038160006001600160a01b0389165af19081156102ef5760009283926102fb575b506020906024604051809581937fbcb7ea5d0000000000000000000000000000000000000000000000000000000083526001600160a01b038d1660048401525af19081156102ef576000916102b4575b61021792506123ea565b935b841061026b576001600160a01b03806040968751938452866020850152169216907fd31f02c44717b409d13b92ec9d2eaf1427fb4e63f85f4777f1458fb8d9387761863392a482519182526020820152f35b60405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b0390fd5b90506020823d6020116102e7575b816102cf602093836121f3565b810103126102e25761021791519061020d565b600080fd5b3d91506102c2565b6040513d6000823e3d90fd5b60209192506103219060403d604011610329575b61031981836121f3565b8101906122fb565b5091906101bd565b503d61030f565b610352915060603d60601161035b575b61034a81836121f3565b810190612234565b91505038610142565b503d610340565b6103c5935060408261037483866123f7565b82517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b03808b1660048301529091166024820152604481019190915294859081906064820190565b038160006001600160a01b0388165af19384156102ef57600090600095610560575b5060009160009560405190630b2339af60e21b82526060826004816001600160a01b038b165afa9182156102ef5760009261053c575b50809260019261042c82612e50565b156104fe575b50505061044b575b5090610445916123ea565b93610219565b604080516000815292969261049792610463826121bb565b825193849283927f29910b110000000000000000000000000000000000000000000000000000000084528d60048501612377565b038160006001600160a01b038a165af19283156102ef57610445936104d2926000906000926104da575b506104cc91926123ea565b926123ea565b94909161043a565b6104cc92506104f8915060403d6040116103295761031981836121f3565b916104c1565b919550925061051c9397506001600160a01b039150169283896130a5565b90969193919291828783156104325761053492613850565b388087610432565b61055691925060603d60601161035b5761034a81836121f3565b509050903861041d565b905061057c91945060403d6040116103295761031981836121f3565b9390386103e7565b6105a6915060203d6020116105ac575b61059e81836121f3565b810190613d02565b38610105565b503d610594565b6105c88183336001600160a01b038216614358565b6100bb565b346102e2576105db36612131565b926001600160a01b03949192858216918180610725575b5050604080517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482018190526024820152604481018390529590866064816000875af19485156102ef576000966000966106fe575b50861061026b5784106106b9577fd9f35a37b64d95edfd8f26adf130ce45f3e9ddf3c7ab8c1fb7224727a339a98e6040968751941693806106aa88883396846040919493926060820195825260208201520152565b0390a482519182526020820152f35b60405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f50545f4f55540000006044820152606490fd5b90955061071b91965060403d6040116103295761031981836121f3565b9590959488610655565b610730913385614358565b86816105f2565b346102e25760031960a0813601126102e257610751612008565b9061075a61201e565b604435926064359267ffffffffffffffff84116102e25760a0908460040194360301126102e2576001600160a01b03938483169260405190630b2339af60e21b8252606082600481885afa9081156102ef578792600092610912575b508380610900575b50501692604051927ff6b911bc0000000000000000000000000000000000000000000000000000000084526040848061081a86858a600485016040919493929460608201956001600160a01b0380921683521660208201520152565b03816000865af19687156102ef576000946000986108d9575b5060843588106106b957877f5349e52482e38bcf6018163f5f871bbae5e00e667aa8e7c531b74c07d5397f92916108786108728a896108d59b88613d97565b99612275565b16946108b5878a604051948594339886919260809396959491966001600160a01b0360a08501981684526020840152604083015260608201520152565b0390a4604051938493846040919493926060820195825260208201520152565b0390f35b9097506108f691945060403d6040116103295761031981836121f3565b9390939688610833565b61090b913388614358565b87836107be565b61092c91925060603d60601161035b5761034a81836121f3565b505090886107b6565b346102e25761094336612131565b919290936001600160a01b03928383169060405196630b2339af60e21b88526060968789600481875afa9182156102ef57600099600093610b01575b50906109969161098e88612778565b9142926128c1565b979150998792508a8281610aec575b50505081610ad7575b50506040517f156e29f60000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810189905260448101869052905086816064816000875af19687156102ef57600097610aa6575b50508510610a61576108d5936040519216917f9334566f6358cd68e33d423fb1c9119c6837e3a2a7a8affaaa5020ed06aec0693391806108b589888c846040919493926060820195825260208201520152565b60405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f4c505f4f55540000006044820152606490fd5b610ac6929750803d10610ad0575b610abe81836121f3565b810190612289565b5050948780610a0e565b503d610ab4565b610ae49288339116614358565b8784816109ae565b610af9928b339116614358565b8a8a826109a5565b610996929a50610b1f919350893d8b1161035b5761034a81836121f3565b5099909992909161097f565b346102e257610b3936612131565b936001600160a01b03929192948585169060405190630b2339af60e21b8252606082600481865afa9586156102ef57856108d597610bb5947f890839d8cbce575f9d1ee3d55bc4d466623de60742c7ad665958f8a9916a54a59a838d600093600095610be6575b5090610baf9133908516613f3a565b88612b7e565b9491969097604051941693806108b58a8a893397859094939260609260808301968352602083015260408201520152565b610c06919550610baf92945060603d60601161035b5761034a81836121f3565b959194929050610ba0565b346102e257610c1f366120a5565b6001600160a01b039493929490838286169381610e93575b604089610c44858a6123f7565b82517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911660248201526044810193909352826064816000895af19182156102ef57600090600093610e6f575b50600093600098604051630b2339af60e21b81526060816004818c5afa9384156102ef57600091600095610e4a575b508093600192610ce182612e50565b15610e17575b505050610d45575b5050505090610cfd916123ea565b9485106106b957604095865193845285602085015216917fac97b87f5422fa3beec99bff8f336310d8ebc7d33d909b7d534cd7c72f61e871863392a482519182526020820152f35b90610d6b610d63610d5d610d739695949c979c612778565b93613919565b9336906122a4565b924292614a87565b50916040519060008252610d86826121bb565b6040848b610dc0835195869384937f5b709f1700000000000000000000000000000000000000000000000000000000855260048501612377565b038160008a5af180156102ef57610cfd94610de793600092610df257506104cc91926123ea565b959091898080610cef565b6104cc9250610e0f9060403d6040116103295761031981836121f3565b9050916104c1565b8a169c50929750610e2c935090508a8d6130a5565b909a91969183838315610ce757610e4292613850565b8d8083610ce7565b909450610e66915060603d60601161035b5761034a81836121f3565b9490508e610cd2565b9050610e8b91925060403d6040116103295761031981836121f3565b91908a610ca3565b610e9f82883388614358565b610c37565b346102e25760031960a0813601126102e257610ebe612008565b610ec661201e565b906064359167ffffffffffffffff938484116102e25760a08185360301126102e2576084359485116102e25760a09085360301126102e25760405191630b2339af60e21b83526060836004816001600160a01b0386165afa9283156102ef576000936113db575b506044356113bf575b6040517f2f13b60c00000000000000000000000000000000000000000000000000000000815260009560209182816004816001600160a01b0389165afa9081156102ef576000916113a2575b50156111925750604051630b2339af60e21b81526060816004816001600160a01b0388165afa80156102ef576001600160a01b0391600091611170575b50604080517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015293909216808416602484015260448035908401529392829060649082906000908a165af19081156102ef576000938391859361114e575b506024604051809681937fbcb7ea5d0000000000000000000000000000000000000000000000000000000083526001600160a01b038c1660048401525af19182156102ef5760009261111c575b5061108692506123ea565b915b6001831061026b576001600160a01b036110b96110b06108d59686848a600401921687613d97565b96600401612275565b16917f5258a3c624debb1cc84b0f5f66c73eef048832eeebe7178e63e95a53cf28dc946001600160a01b03604051931692806108b5878a33966044359085909493926060926001600160a01b036080840197168352602083015260408201520152565b90915082813d8311611147575b61113381836121f3565b810103126102e2576110869151908861107b565b503d611129565b61116891935060403d6040116103295761031981836121f3565b50918a61102e565b611189915060603d60601161035b5761034a81836121f3565b91505088610fbf565b9550506111f860406111a787600401856123f7565b81517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091166024820152604480359082015291829081906064820190565b038160006001600160a01b0388165af19081156102ef57600090600092611380575b5060009160009760405190630b2339af60e21b82526060826004816001600160a01b038b165afa9182156102ef5760009261135c575b508260019261126183600401612e50565b15611311575b505050611280575b509061127a916123ea565b91611088565b60408051600081529298926112d592611298826121bb565b825193849283927f29910b110000000000000000000000000000000000000000000000000000000084526001600160a01b038c1660048501612377565b038160006001600160a01b038a165af19283156102ef5761127a93611309926000906000926104da57506104cc91926123ea565b96909161126f565b919550925061133c9399506001600160a01b039150169260040190836001600160a01b0388166130a5565b90989193919291828783156112675761135492613850565b898087611267565b61137691925060603d60601161035b5761034a81836121f3565b509050908a611250565b905061139b915060403d6040116103295761031981836121f3565b908761121a565b6113b99150833d85116105ac5761059e81836121f3565b88610f82565b6113d660443583336001600160a01b038216614358565b610f36565b6113f591935060603d60601161035b5761034a81836121f3565b50509185610f2d565b346102e25761140c366120a5565b9290939160405194630b2339af60e21b86526060866004816001600160a01b0388165afa9081156102ef57600096600092611695575b5061144d86866123f7565b848061167a575b5050600091849760009761146781612e50565b15611637575b50509061149b91878961149361148b6114858b612778565b94613919565b9436906122a4565b9342936140ae565b5050906114e660408051600081526114b2816121bb565b8151809381927f5b709f17000000000000000000000000000000000000000000000000000000008352878b60048501612377565b038160006001600160a01b038b165af19788156102ef57611578986060946115289360009060009361160d575b50611522906104cc93946123dd565b996123ea565b9560405197889283927f156e29f60000000000000000000000000000000000000000000000000000000084528b600485016040919493926001600160a01b03606083019616825260208201520152565b038160006001600160a01b0388165af19485156102ef576000956115ea575b508410610a61576001600160a01b03806040968751938452866020850152169216907fb51950711c9b21dc7888d41f68a19540231ffb5f0d19d8f75cbccaf90ffa7fa5863392a482519182526020820152f35b61160491955060603d606011610ad057610abe81836121f3565b50509386611597565b6104cc9350611522915061162f9060403d6040116103295761031981836121f3565b935090611513565b81995061149b939298506116729450866001600160a01b0361165a9316896130a5565b50989198949098886001600160a01b03829c16613850565b90918a61146d565b61168e91336001600160a01b038b16614358565b8884611454565b9096506116b1915060603d60601161035b5761034a81836121f3565b9196905088611442565b346102e2576116c9366120a5565b9290939160009360405190630b2339af60e21b82526060826004816001600160a01b0389165afa9687156102ef57611795976000936000916118fc575b5061171183886123f7565b86806118e1575b90509360009361172781612e50565b1561189f575b50509061174d91838561174561148b6114858c612778565b9342936139b3565b5050916040805160008152611761816121bb565b8151809a81927f29910b11000000000000000000000000000000000000000000000000000000008352878b60048501612377565b038160006001600160a01b038b165af180156102ef576117dc9860609461152893600092600094611871575b506117d692916117d0916123dd565b946123ea565b976123ea565b038160006001600160a01b0388165af19485156102ef5760009561184e575b508410610a61576001600160a01b03806040968751938452866020850152169216907fc87b85efc5055ef177e0092af0d4e624fff4b1d57db748857f65e4b7e4a28a36863392a482519182526020820152f35b61186891955060603d606011610ad057610abe81836121f3565b505093866117fb565b6117d09194506117d693506118949060403d6040116103295761031981836121f3565b9490939091506117c1565b61174d939299508195506118d99450876001600160a01b036118c293168a6130a5565b509991949094896001600160a01b03829816613850565b90918b61172d565b6118f591336001600160a01b038816614358565b8a86611718565b905061191891935060603d60601161035b5761034a81836121f3565b939150928a611706565b61192b36612048565b939291906001600160a01b03938484169160405193630b2339af60e21b8552606085600481875afa9586156102ef576108d596600096600091611a0a575b509061198793929161197e8b8b8a1630612476565b97889287612b7e565b9391969097602061199782612275565b918360405196168652013560208501528760408501528860608501528460808501528560a085015216917fa9b749795680682fbc5a34071e19282bbb23496a8cf9bbd99bf941359bbe65bf60c03392a4604051948594859094939260609260808301968352602083015260408201520152565b6119879493929750611a2b915060603d60601161035b5761034a81836121f3565b979190509690919293611969565b60031960a0813601126102e257611a4e612008565b90611a5761201e565b916044359267ffffffffffffffff84116102e25760a0846004019385360301126102e2576001600160a01b039182821660405195630b2339af60e21b87526060958688600481865afa9788156102ef57600090600099611c53575b508187611ac0921687612476565b94611ad9611acd82612778565b429088606435916128c1565b9b9250809391508803611c0f57611b47928a928c809381611bfa575b50505060405193849283927f156e29f60000000000000000000000000000000000000000000000000000000084528a600485016040919493926001600160a01b03606083019616825260208201520152565b03816000885af19788156102ef57600098611bd9575b50506084358710610a61576108d595611b967f8969c3e485cb9f3b23622228064bc63e7350f6cf343dd86ab86169041a91eaae92612275565b6108b5878a8c60405195869516996024339901359086919260809396959491966001600160a01b0360a08501981684526020840152604083015260608201520152565b611bf0929850803d10610ad057610abe81836121f3565b5050958880611b5d565b611c07928d339116614358565b8c8281611af5565b606460405162461bcd60e51b815260206004820152601960248201527f536c6970706167653a204e4f545f414c4c5f53595f55534544000000000000006044820152fd5b879950611ac09150611c7283918a3d8c1161035b5761034a81836121f3565b509a509150611ab2565b60031990610140823601126102e257611c93612008565b611c9b61201e565b60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102e25767ffffffffffffffff908161010435116102e25760a08561010435360301126102e25761012435948286116102e25760a0908660040196360301126102e2576001600160a01b03630b2339af60e21b85526060856004818486165afa9283156102ef57600095600094611fdf575b50611d5382611d4289866123f7565b971696876101043560040191612476565b936000918597600099611d6581612e50565b15611fb3575b5050611d7f611d7986612778565b92613919565b91604051918260a08101109060a084011117611f84578989611dce9460a085016040526064358552608435602086015260a435604086015260c435606086015260e435608086015242936140ae565b505090611e196040805160008152611de5816121bb565b8151809381927f5b709f17000000000000000000000000000000000000000000000000000000008352878a60048501612377565b03816000888a165af19788156102ef57611ea498606094611e5493600090600093611f5a575b50611e4e906104cc93946123dd565b9b6123ea565b9760405197889283927f156e29f600000000000000000000000000000000000000000000000000000000845289600485016040919493926001600160a01b03606083019616825260208201520152565b038160008587165af19485156102ef57600095611f37575b506044358510610a61576108d5937f387bf301bf673df0120e2d57e639f0e05e5e03d5336577c4cd83c1bff96e8dee611efa61010435600401612275565b604080516001600160a01b0390941684526101043560240135602085015283018890526060830186905283169390921691339180608081016108b5565b611f5191955060603d606011610ad057610abe81836121f3565b50509386611ebc565b6104cc9350611e4e9150611f7c9060403d6040116103295761031981836121f3565b935090611e3f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b909850611fc9919950611fd893508689876130a5565b5099919993909986819a613850565b8980611d6b565b909350611ffc91955060603d60601161035b5761034a81836121f3565b95919050949287611d33565b600435906001600160a01b03821682036102e257565b602435906001600160a01b03821682036102e257565b35906001600160a01b03821682036102e257565b9060031960a0818401126102e2576001600160a01b039260043584811681036102e2579360243590811681036102e2579260443592606435926084359167ffffffffffffffff83116102e2578260a0920301126102e25760040190565b60031991610140838301126102e2576001600160a01b039260043584811681036102e2579360243590811681036102e25792604435926064359260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c8401126102e257608492610124359167ffffffffffffffff83116102e2578260a0920301126102e25760040190565b60031960a09101126102e2576001600160a01b039060043582811681036102e2579160243590811681036102e25790604435906064359060843590565b67ffffffffffffffff8111611f8457604052565b610120810190811067ffffffffffffffff821117611f8457604052565b60c0810190811067ffffffffffffffff821117611f8457604052565b6020810190811067ffffffffffffffff821117611f8457604052565b6080810190811067ffffffffffffffff821117611f8457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611f8457604052565b908160609103126102e2578051916001600160a01b039283811681036102e25792602083015181811681036102e25760409093015190811681036102e25790565b356001600160a01b03811681036102e25790565b908160609103126102e2578051916040602083015192015190565b91908260a09103126102e25760405160a0810181811067ffffffffffffffff821117611f84576040526080808294803584526020810135602085015260408101356040850152606081013560608501520135910152565b91908260409103126102e2576020825192015190565b60005b8381106123245750506000910152565b8181015183820152602001612314565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361237081518092818752878088019101612311565b0116010190565b61239c93926001600160a01b0360609316825260208201528160408201520190612334565b90565b9060001982019182116123ae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116123ae57565b919082018092116123ae57565b9061240190612e50565b61239c57503090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156102e2570190565b6004111561244757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91906080820192612487848461240a565b936000943560048110156127745761249e8161243d565b8061259c57505090608460209260406124b686612275565b6124c68688013580923390613f3a565b955b016001600160a01b038094816124dd84612275565b16612592576124ff88935b6124fa836124f583612275565b6143b5565b612275565b9782604051998a9889977f20e8c565000000000000000000000000000000000000000000000000000000008952166004880152166024860152604485015260016064850152165af19182156125865791612557575090565b90506020813d60201161257e575b81612572602093836121f3565b810103126102e2575190565b3d9150612565565b604051903d90823e3d90fd5b6124ff89936124e8565b806125a860039261243d565b036125f3575090608460209260406125bf86612275565b6125cf8688013580923390613f3a565b6125ed816125dc89612275565b6125e7858b01612275565b90613ffc565b956124c8565b6001600160a01b038061260586612275565b1661273657602085013534036126f2575b8061262360608701612275565b169061262e86612275565b166126eb576020850135915b61264d61264687612275565b918761240a565b92823b156126e75791612698939188936040518096819582947f2bdb823c00000000000000000000000000000000000000000000000000000000845260208d01359060048501613d1a565b03925af180156126dc576126c3575b5090608460209260406125ed6126be828801612275565b613f6b565b60209291946126d360849261216e565b949192506126a7565b6040513d87823e3d90fd5b8780fd5b859161263a565b606460405162461bcd60e51b815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b8061274086612275565b1661274d60608701612275565b60208701359081612761575b505050612616565b61276c923390614358565b388080612759565b8580fd5b6040805161278581612182565b60009283825283602083015283838301528360608301528360808301528360a08301528360c08301528360e083015283610100809301526001600160a01b0380948451927f794052f300000000000000000000000000000000000000000000000000000000845230600485015283602481610120998a94165afa9586156128b5578196612816575b50505050505090565b9091928094959650813d83116128ae575b61283181836121f3565b810103126128ab5784519461284586612182565b83518652602084015160208701528084015190860152606083015191821682036128ab575090829160608501526080810151608085015260a081015160a085015260c081015160c085015260e081015160e085015201519082015238808080808061280d565b80fd5b503d612827565b508451903d90823e3d90fd5b919293907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082116102e2578085116102e25760009582158015612b2a575b612b005760a08501511115612ad657604084019586518015600014612a5857505061292b858361428a565b90600082126102e25760006003831115612a495750816001908060011c600181018091116123ae5791905b848310612a29575050505b81116102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1881019081136001166123ae57946103e89194935b60008713156129ff57602081016129b487825161433c565b90526129c185825161433c565b90526129d76129d0838861433c565b825161433c565b9052600081126102e25793600081126102e25792600081126102e25791600081126102e25790565b60046040517fccbf5468000000000000000000000000000000000000000000000000000000008152fd5b90919350612a4084612a3b8184612b45565b6123ea565b821c9190612956565b91156129615760019150612961565b86979250612a6c90612a749294969761428a565b8651906142c9565b612a7f82518661428a565b94612a9060208801968751906142c9565b80831215612ab8575050612aaa81612ab29298965161428a565b8251906142c9565b9461299c565b612aaa91985080979650612ad092509796865161428a565b9361299c565b60046040517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b60046040517f25daaec3000000000000000000000000000000000000000000000000000000008152fd5b508515612900565b818102929181159184041417156123ae57565b8115612b4f570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b959096939492612b8d88612778565b93612b9782613919565b9885519260009a848c80961261277457612bb1908b612b32565b96885191868312612df8576020809a0151908782126126e7578d998894612bda88938e95612b32565b670de0b6b3a76400009004612bee916123ea565b612bf791612b45565b612c03819e82906123dd565b9586836001600160a01b0380809816931693612c20908585613850565b612c2992613850565b604080517fdb74aa150000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529b90921660248c0152909997889160449183915af1958615612dee578296612db6575b50926060928692612cdf95849e8b51978896879586937f156e29f6000000000000000000000000000000000000000000000000000000008552600485016040919493926001600160a01b03606083019616825260208201520152565b0393165af1998a15612dab5799612d88575b508810612d445710612d01575050565b60649250519062461bcd60e51b82526004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f59545f4f55540000006044820152fd5b825162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f4c505f4f55540000006044820152606490fd5b612da291995060603d606011610ad057610abe81836121f3565b50509738612cf1565b8551903d90823e3d90fd5b9293909195508883813d8311612de7575b612dd181836121f3565b8101031261277457915194919291906060612c83565b503d612dc7565b88513d84823e3d90fd5b8680fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e2570180359067ffffffffffffffff82116102e257602001918160051b360383136102e257565b612e5d6040820182612dfc565b9050159081612e6a575090565b612e7991506060810190612dfc565b90501590565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e2570180359067ffffffffffffffff82116102e2576020019181360383136102e257565b67ffffffffffffffff8111611f8457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6080818303126102e25780519260208201519260408301519260608101519067ffffffffffffffff82116102e2570181601f820112156102e2578051612f4f81612ed0565b92612f5d60405194856121f3565b818452602082840101116102e25761239c9160208085019101612311565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156102e257016020813591019167ffffffffffffffff82116102e25781360383136102e257565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9015613043578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156102e2570190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81813603018212156102e2570190565b919390936000936000936001600160a01b036130c083612275565b1690839760408401906130d38286612dfc565b9050613542575b505060608301916130eb8385612dfc565b9050613113575b505050670de0b6b3a764000091602061310d92013590612b32565b04841190565b61314060a061313a61313461312e87899c9e9d9a9899612dfc565b9061300a565b80613072565b01612275565b606061315261313461312e888c612dfc565b01359460048610156102e2576131706001600160a01b03918a612dfc565b929061317f60808c018c612e7f565b9390966040519961318f8161243d565b60208b015281841660408b01528d60608b0152166080890152608088528760a081011067ffffffffffffffff60a08a011117611f845760a088016040527f6122b1730000000000000000000000000000000000000000000000000000000060a089015283610144890160a060a48b015252610164808901908560051b8a010194826000905b82821061334d57505050505091613272916001600160a01b0360009695941660c489015260001960e48901527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c9485898403016101048a0152612fcb565b91858303016101248601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60856132ad60a082019482612334565b0301908360a08701915af19182156102ef5761330561310d93602092670de0b6b3a76400009660009160009361330f575b506132ff6132f884878061152296975183010191016122fb565b90926123ea565b9a6123dd565b95928294506130f2565b6132f8935061152292506133416132ff9160a0803d8060008386013e613337818386016121f3565b8301019101612f0a565b965094506132de915050565b90919293967ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9c8c820301855287357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112156102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818382013603018382013512156102e257606080835281840180350180358483015260208101356080850152604081013560a0850152600491013510156102e25760019160209182916040808761352e61351260c061342e8489018035016060013561243d565b8784018035016060810135888301526134ff9061344d90608001612034565b6001600160a01b031660e089810191909152916134b7613497613477888d0180350160a001612034565b6001600160a01b03166101008c81019190915292888d0180350101612034565b936001600160a01b036101209516858c0152878c01888d01350101612034565b6001600160a01b03166101408a8101919091528a870180350191820135610160808c019190915293820135610180808c0191909152908201356101a08b015292810190612f7b565b90916101c08901526101e0880191612fcb565b613521878401808a0190612f7b565b908783038a890152612fcb565b940101359101529901950193920190613214565b9092985083975061356a9196506001600160a01b0361356361357095612275565b91166143b5565b85612dfc565b61357f60808793970183612e7f565b9690916040519060008252613593826121bb565b6040519889937f6122b1730000000000000000000000000000000000000000000000000000000085528260a4860160a060048801525260c4850160c48460051b87010193826000905b82821061368a57505050505093839261361d61362c936000976001600160a01b038d1660248801528a60448801526003199485888403016064890152612fcb565b91848303016084850152612334565b0381838a5af19586156102ef576000809660009861365a575b506136519096846123dd565b969438806130da565b9050613651975061367f9196503d806000833e61367781836121f3565b810190612f0a565b509790969190613645565b919396977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c9087929496970301855286357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112156102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818382013603018382013512156102e25782810183820135016060835280356060840152602091828201356080850152604082013560a085015260608201359360048510156102e257604080876138076135126001600160a01b036134ff8a99826137cf6137b660019f8c9060c080926137808361243d565b01528c61378f60808701612034565b60e0988991169101528c6137a560a08701612034565b610100958691169101528401612034565b946001600160a01b036101209616868d01528301612034565b6001600160a01b036101409116818c015261016091830135828c015261018094830135858c01528201356101a08b0152810190612f7b565b940101359101529801950192018d9796959493916135dc565b3d1561384b573d9061383182612ed0565b9161383f60405193846121f3565b82523d6000602084013e565b606090565b8215613914576001600160a01b0390811690816138c6575050600080809381935af161387a613820565b501561388257565b606460405162461bcd60e51b815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b9261391293604051937fa9059cbb00000000000000000000000000000000000000000000000000000000602086015216602484015260448301526044825261390d826121d7565b614c3a565b565b505050565b60206001600160a01b03600460009360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af19081156102ef57600091612557575090565b1561396f57565b606460405162461bcd60e51b815260206004820152600e60248201527f6e6f206578697374696e67206c700000000000000000000000000000000000006044820152fd5b94959291906139f5604051956139c88761219f565b878752602087019280845260408801948552606098606089019687528260808a01528a60a08a015261461b565b94604088015115613b21575b60005b87890151811015613adc5786908986613a7b613a74613a906080613a868b858b613a808e613a50613a358e8e61492e565b9e8f9451925196519c5196613a4986614c0d565b9184615191565b613a6f836020949e94613a67949e948988516123ea565b9601516123dd565b6123dd565b958b6123ea565b612b32565b986123dd565b95015185856149b0565b613acb57505011613ab257600182018092116123ae576001918a525b01613a04565b60001982019182116123ae5760019160208b0152613aac565b949c509a5092985050505050505050565b60405162461bcd60e51b815260206004820152601a60248201527f536c6970706167653a20415050524f585f4558484155535445440000000000006044820152606490fd5b602088018051825160009060208a01613b3a815161239f565b808403613bda575081519051613b4f9161433c565b670d529ae9e860000090808202918205036123ae57670de0b6b3a7640000613b7992519105614323565b600081126102e25780821015613bd357505b80821015613bcc57505b808252845180821015613bc45750905b52613baf886148bd565b613bbf6040825101511515613968565b613a01565b905090613ba5565b9050613b95565b9050613b8b565b613be481856123ea565b60018082018092116123ae571c908351613bff838551614323565b613c09828561433c565b6000821380613cf8575b15613cb4578f613c90670de0b6b3a764000091613c8b613c76613c71613c9797613c66613c6b613c538f8f9060009e613c4d91519061433c565b9061428a565b613c66613c60858d61428a565b91614256565b614d5f565b98614256565b61548b565b6040613c828451614d45565b93015195614323565b61428a565b0590614323565b1215613cac5750613ca79061239f565b613b3a565b935092613b3a565b606460405162461bcd60e51b815260206004820152601260248201527f696e76616c6964207074546f4d61726b657400000000000000000000000000006044820152fd5b5060008113613c13565b908160209103126102e2575180151581036102e25790565b916001600160a01b038092168352602083015260606040830152823560048110156102e257613d488161243d565b6060830152613d5960208401612034565b1660808201526060613d82613d716040850185612f7b565b608060a086015260e0850191612fcb565b920135908115158092036102e25760c0015290565b93929360808501613da8818761240a565b3560048110156102e257613dbb8161243d565b80613e20575050602092613dd0928692614a05565b925b01358210613ddc57565b606460405162461bcd60e51b815260206004820152602060248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152fd5b80613e31600392989596949861243d565b03613e765750613e4882613e719260209530614a05565b8095613e6382613e5a60408701612275565b6125e787612275565b613e6c84612275565b613850565b613dd2565b90613ea0613e9a846001600160a01b03936060820197613e9589612275565b614a05565b94612275565b16613eb7613eb060408501612275565b928461240a565b90803b156102e257613efd9460008094604051978895869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501613d1a565b03925af19182156102ef57602092613f2b575b50613e71613f206126be83612275565b8095613e6c84612275565b613f349061216e565b38613f10565b9091906001600160a01b031680613f565750905034036126f257565b81613f6057505050565b613912923091614358565b6000906001600160a01b031680613f825750504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa918215612586578092613fcb57505090565b9091506020823d602011613ff4575b81613fe7602093836121f3565b810103126128ab57505190565b3d9150613fda565b6001600160a01b03919082168061405d575016803b156102e2576000906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af180156102ef576140545750565b6139129061216e565b92915050813b156102e2576000916024839260405194859384927f2e1a7d4d00000000000000000000000000000000000000000000000000000000845260048401525af180156102ef576140545750565b919095929495604051906140c18261219f565b8382526020946140f78684019783895260408501958652606093606086019a8b5260809782608088015260a087019c8d5261461b565b868a51604081015115614211575b505060005b8a519084820151811015613adc578b87876141498c8f8f979061413f8f92896141329161492e565b809a8c8851915191615191565b9691959095614c0d565b958a885188116141ee5761418b61419294613a7b83614183613a7b96613a6f8e61419d9d61417a829a8d51516123dd565b9b5101516123ea565b9251906123ea565b98516123dd565b9551015185856149b0565b6141d9575050116141c057600182018092116123ae576001918c51525b0161410a565b60001982019182116123ae57600191898d5101526141ba565b9d509d50505050965050955050505050929190565b9750505050505050506000199150019182116123ae57600191898d5101526141ba565b015161421f85515183614b83565b8082101561424f57505b878b5101526142388a516148bd565b6142486040855101511515613968565b8638614105565b9050614229565b90670de0b6b3a7640000918281029281840514901517156123ae57565b90816000039180830560001914901517156123ae57565b8181029291600082127f80000000000000000000000000000000000000000000000000000000000000008214166123ae5781840514901517156123ae57565b8115612b4f5760001982147f80000000000000000000000000000000000000000000000000000000000000008214166123ae570590565b90670de0b6b3a7640000600083820393128184128116918413901516176123ae57565b818103929160001380158285131691841216176123ae57565b919091600083820193841291129080158216911516176123ae57565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0392831660248201529290911660448301526064808301939093529181526139129161390d6084836121f3565b906001600160a01b039081831692831561461557604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03841660248201526020959193918690829060449082905afa801561460a576000906145d1575b6b7fffffffffffffffffffffff915010614440575b5050505050565b825193600080878701927f095ea7b300000000000000000000000000000000000000000000000000000000948585521692836024890152604497828982015288815261448b816121d7565b519082875af1614499613820565b816145a1575b501561455f5791600092918380938651908982019384526024820152600019888201528781526144ce816121d7565b51925af16144da613820565b8161452f575b50156144ed578080614439565b606492917f5361666520417070726f7665000000000000000000000000000000000000000091519262461bcd60e51b84526004840152600c6024840152820152fd5b80518015925085908315614547575b505050386144e0565b6145579350820181019101613d02565b38848161453e565b6064867f5361666520417070726f766500000000000000000000000000000000000000008787519262461bcd60e51b84526004840152600c6024840152820152fd5b805180159250889083156145b9575b5050503861449f565b6145c99350820181019101613d02565b3887816145b0565b508581813d8311614603575b6145e781836121f3565b810103126102e2576b7fffffffffffffffffffffff9051614424565b503d6145dd565b84513d6000823e3d90fd5b50505050565b92919260409081516080810181811067ffffffffffffffff821117611f8457835260009182825260208201908382528483018481526060840196858852849960a084018181511115614894579061467291516123dd565b936080840151976301e1338096878a0299808b05891490151715614867577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff998a881161486357876146c3916142c9565b8981131561483357815260208601518981121561482b57600019905b8a81131561481d575b6146fc670de0b6b3a7640000968792612b32565b04908b82116147db579061470f9161428a565b80845286519081158015614815575b6147df5750508551918861473c896101008a01519651945196612b32565b048b81116147db5761474d90614db4565b9485126147ab57509261478660c09593613c6661478161477c86613c66613c606147959e9d9b61478c9a61433c565b61543f565b614256565b90614323565b90520151612b32565b049182116128ab57506147a790614db4565b9052565b8460249151907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b8a80fd5b604492508351917fb1c4aefb00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50801561471e565b61482690614c0d565b6146e8565b6001906146df565b6024908351907f1ca418760000000000000000000000000000000000000000000000000000000082526004820152fd5b8980fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b600489517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b8051602082015110908115614918575b506148d457565b606460405162461bcd60e51b815260206004820152601f60248201527f496e7465726e616c3a20494e56414c49445f415050524f585f504152414d53006044820152fd5b670de0b6b3a764000091506080015111386148cd565b9015806149a3575b61499c57602081519101518082111561498d57606460405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a2067756573734d696e203e2067756573734d61780000006044820152fd5b614996916123ea565b60011c90565b6040015190565b5060408101511515614936565b90670de0b6b3a7640000908382038281116123ae57826149d1859284612b32565b04111593846149e2575b5050505090565b909180939450018083116123ae576149f991612b32565b041015388080806149db565b60a4604091602093614a24966001600160a01b03978895869201612275565b60405197889687957f769f8e5d0000000000000000000000000000000000000000000000000000000087521660048601526024850152166044830152600096879182606485015260016084850152165af1918215612586578092613fcb57505090565b9490939192614a9790858761461b565b92604083015115614b50575b60005b6060840151811015613adc57614abc818561492e565b614ad3614acb8289898c615191565b509190614c0d565b84811180159190614b3357608088015182614b09575b5050614afc575084526001905b01614aa6565b9750945050509250509190565b909150670de0b6b3a76400009081038181116123ae57614b299087612b32565b0411153880614ae9565b5050509060001982019182116123ae576001916020860152614af6565b602083018051614b61885187614b83565b80821015614b7b5750905b52614b76836148bd565b614aa3565b905090614b6c565b90614bb1614bb7614b9d6060850151604086015190614323565b670de0b6b3a764000092839186519061428a565b05614db4565b9281840190828212600086129080158216911516176123ae57613c4d6020614be8613c9094613c66614bf199614256565b9201518561433c565b6103e7908181029181830414901517156123ae576103e8900490565b7f800000000000000000000000000000000000000000000000000000000000000081146123ae5760000390565b6001600160a01b0316604051604081019181831067ffffffffffffffff841117611f8457614caa926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1614ca4613820565b91615981565b805190828215928315614d2d575b50505015614cc35750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b614d3d9350820181019101613d02565b388281614cb8565b8015612b4f576ec097ce7bc90715b34b9f10000000000590565b8115612b4f570590565b15614d7057565b606460405162461bcd60e51b815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008112158061517e575b614de790614d69565b60008112615169576064906806f05b59d3b20000008112615106577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156150cd575b806856bc75e2d63100000084921215615093575b682b5e3af16b1880000081121561505b575b6815af1d78b58c400000811215615023575b680ad78ebc5ac6200000811215614fec575b81811215614fb5575b6802b5e3af16b1880000811215614f7e575b68015af1d78b58c40000811215614f47575b60028282800205056003838383020505600484848302050560058585830205056006868683020505600787878302050590600888888402050592600989898602050594600a8a8a8802050596600b8b8b8a02050598600c8c8c8c0205059a0101010101010101010101010205020590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000083920193020591614ed6565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000083920193020591614ec4565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000083920193020591614eb2565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000083920193020591614ea9565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000083920193020591614e97565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000083920193020591614e85565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000083920193020591614e73565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001614e5f565b6803782dace9d90000008112615156577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092614e4a565b68056bc75e2d6310000082600192614e4a565b61517590600003614db4565b61239c90614d45565b5068070c1cc73b00c80000811315614dde565b939192845160208301518351906040850151928481126153fb57613c66613c606151c5936151bf8885614323565b9361433c565b670d529ae9e86000008082136153c457506151ef9291613c666147816151ea9361543f565b61433c565b670de0b6b3a76400009081811261536c57606061521761521283613c6687614256565b614273565b94015190600080941360001461539d5781613c6661523492614256565b82811261536c57508161525161524b60e093614300565b8661428a565b05965b0151917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9283811161536857876064615290615297938361428a565b0595614323565b91818312801561534d571561534557600019925b82811315615337575b81810291818304149015171561530a57866152ce916123ea565b600019810190811161530a57866152e491612b45565b9283116128ab57506152fd61239c93926153049261428a565b95856155b2565b936155b2565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b61534090614c0d565b6152b4565b6001926152ab565b50505061239c92915061536361530491866155b2565b6152fd565b5080fd5b602490604051907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b506153be615212826153b96153b360e095614300565b8861428a565b6142c9565b96615254565b60449250604051917ffc68d09e00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b606460405162461bcd60e51b815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b670de0b6b3a7640000811461546157613c7181613c66613c6061239c94614300565b60046040517fa9c8b14d000000000000000000000000000000000000000000000000000000008152fd5b600081131561556e5780670c7d713b49da0000128061555d575b1561555457670de0b6b3a7640000906ec097ce7bc90715b34b9f1000000000906154f8908302828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302614d5f565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b0590565b61239c90615635565b50670f43fc2c04ee000081126154a5565b606460405162461bcd60e51b815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b600082121561562d57600019915b600081131561561e57905b670de0b6b3a7640000918281029281840414901517156123ae576155ee91612b45565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116102e25761239c9161428a565b61562790614c0d565b906155cb565b6001916155c0565b670de0b6b3a7640000811261596a5760649060007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561593f575b73011798004d755d3c8bc8e03204cf44619e00000082121561591e575b820290808302906e01855144814a7ff805980ff008400090818312156158fb575b50506b02df0ab5a80a22c61ab5a700808212156158db575b50693f1fce3da636ea5cf850808212156158bb575b50690127fa27722cc06cc5e28082121561589b575b5068280e60114edb805d038082121561587b575b50680ebc5fb4174612111080821215615864575b506808f00f760a4b2db55d80821215615844575b506806f5f177578893793780821215615824575b506806248f33704b28660380821215615805575b506805c548670b9510e7ac808212156157e6575b506157a568056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102614d5f565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b010590565b68056bc75e2d631000006756bc75e2d631000092020591019038615769565b68056bc75e2d6310000067ad78ebc5ac62000092020591019038615755565b68056bc75e2d6310000068015af1d78b58c4000092020591019038615741565b68056bc75e2d631000006802b5e3af16b18800009202059101903861572d565b68056bc75e2d631000008092020591019038615719565b68056bc75e2d63100000680ad78ebc5ac620000092020591019038615705565b68056bc75e2d631000006815af1d78b58c400000920205910190386156f1565b68056bc75e2d63100000682b5e3af16b18800000920205910190386156dc565b68056bc75e2d631000006856bc75e2d631000000920205910190386156c7565b68ad78ebc5ac62000000925069021e19e0c9bab2400000020591019038806156af565b906b1425982cf597cd205cef73806803782dace9d90000009105910161568e565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615671565b61597661597b91614d45565b615635565b60000390565b919290156159e25750815115615995575090565b3b1561599e5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156159f55750805190602001fd5b6102b09060405191829162461bcd60e51b835260206004840152602483019061233456fea26469706673582212205a6b25b056ce2c1f82059abca47f72f670f1ceb2dce8b78e13d3adb98ab7cf3b64736f6c63430008170033";
2692
+ "0x6080806040523461001757615a4f90816200001d8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816312599ac614611c7c575080632756ce0614611a395780633dbe1c55146119225780634e390267146116bb57806358bda475146113fe57806360da086014610ea45780636b77ac9e14610c11578063844384aa14610b2b57806397ee279e14610935578063b00f09d714610737578063b7d75b8b146105cd5763d13b4fdc146100a357600080fd5b346102e2576100b136612048565b91809391936105b3575b6000926040517f2f13b60c0000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b0388165afa9081156102ef57600091610584575b50156103625750604051630b2339af60e21b81526060816004816001600160a01b0387165afa80156102ef576001600160a01b0391600091610330575b5016604051907ff6b911bc0000000000000000000000000000000000000000000000000000000082526040828061019c86858c600485016040919493929460608201956001600160a01b0380921683521660208201520152565b038160006001600160a01b0389165af19081156102ef5760009283926102fb575b506020906024604051809581937fbcb7ea5d0000000000000000000000000000000000000000000000000000000083526001600160a01b038d1660048401525af19081156102ef576000916102b4575b61021792506123ea565b935b841061026b576001600160a01b03806040968751938452866020850152169216907fd31f02c44717b409d13b92ec9d2eaf1427fb4e63f85f4777f1458fb8d9387761863392a482519182526020820152f35b60405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b0390fd5b90506020823d6020116102e7575b816102cf602093836121f3565b810103126102e25761021791519061020d565b600080fd5b3d91506102c2565b6040513d6000823e3d90fd5b60209192506103219060403d604011610329575b61031981836121f3565b8101906122fb565b5091906101bd565b503d61030f565b610352915060603d60601161035b575b61034a81836121f3565b810190612234565b91505038610142565b503d610340565b6103c5935060408261037483866123f7565b82517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b03808b1660048301529091166024820152604481019190915294859081906064820190565b038160006001600160a01b0388165af19384156102ef57600090600095610560575b5060009160009560405190630b2339af60e21b82526060826004816001600160a01b038b165afa9182156102ef5760009261053c575b50809260019261042c82612e50565b156104fe575b50505061044b575b5090610445916123ea565b93610219565b604080516000815292969261049792610463826121bb565b825193849283927f29910b110000000000000000000000000000000000000000000000000000000084528d60048501612377565b038160006001600160a01b038a165af19283156102ef57610445936104d2926000906000926104da575b506104cc91926123ea565b926123ea565b94909161043a565b6104cc92506104f8915060403d6040116103295761031981836121f3565b916104c1565b919550925061051c9397506001600160a01b039150169283896130a5565b90969193919291828783156104325761053492613850565b388087610432565b61055691925060603d60601161035b5761034a81836121f3565b509050903861041d565b905061057c91945060403d6040116103295761031981836121f3565b9390386103e7565b6105a6915060203d6020116105ac575b61059e81836121f3565b810190613d02565b38610105565b503d610594565b6105c88183336001600160a01b038216614358565b6100bb565b346102e2576105db36612131565b926001600160a01b03949192858216918180610725575b5050604080517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482018190526024820152604481018390529590866064816000875af19485156102ef576000966000966106fe575b50861061026b5784106106b9577fd9f35a37b64d95edfd8f26adf130ce45f3e9ddf3c7ab8c1fb7224727a339a98e6040968751941693806106aa88883396846040919493926060820195825260208201520152565b0390a482519182526020820152f35b60405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f50545f4f55540000006044820152606490fd5b90955061071b91965060403d6040116103295761031981836121f3565b9590959488610655565b610730913385614358565b86816105f2565b346102e25760031960a0813601126102e257610751612008565b9061075a61201e565b604435926064359267ffffffffffffffff84116102e25760a0908460040194360301126102e2576001600160a01b03938483169260405190630b2339af60e21b8252606082600481885afa9081156102ef578792600092610912575b508380610900575b50501692604051927ff6b911bc0000000000000000000000000000000000000000000000000000000084526040848061081a86858a600485016040919493929460608201956001600160a01b0380921683521660208201520152565b03816000865af19687156102ef576000946000986108d9575b5060843588106106b957877f5349e52482e38bcf6018163f5f871bbae5e00e667aa8e7c531b74c07d5397f92916108786108728a896108d59b88613d97565b99612275565b16946108b5878a604051948594339886919260809396959491966001600160a01b0360a08501981684526020840152604083015260608201520152565b0390a4604051938493846040919493926060820195825260208201520152565b0390f35b9097506108f691945060403d6040116103295761031981836121f3565b9390939688610833565b61090b913388614358565b87836107be565b61092c91925060603d60601161035b5761034a81836121f3565b505090886107b6565b346102e25761094336612131565b919290936001600160a01b03928383169060405196630b2339af60e21b88526060968789600481875afa9182156102ef57600099600093610b01575b50906109969161098e88612778565b9142926128c1565b979150998792508a8281610aec575b50505081610ad7575b50506040517f156e29f60000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810189905260448101869052905086816064816000875af19687156102ef57600097610aa6575b50508510610a61576108d5936040519216917f9334566f6358cd68e33d423fb1c9119c6837e3a2a7a8affaaa5020ed06aec0693391806108b589888c846040919493926060820195825260208201520152565b60405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f4c505f4f55540000006044820152606490fd5b610ac6929750803d10610ad0575b610abe81836121f3565b810190612289565b5050948780610a0e565b503d610ab4565b610ae49288339116614358565b8784816109ae565b610af9928b339116614358565b8a8a826109a5565b610996929a50610b1f919350893d8b1161035b5761034a81836121f3565b5099909992909161097f565b346102e257610b3936612131565b936001600160a01b03929192948585169060405190630b2339af60e21b8252606082600481865afa9586156102ef57856108d597610bb5947f890839d8cbce575f9d1ee3d55bc4d466623de60742c7ad665958f8a9916a54a59a838d600093600095610be6575b5090610baf9133908516613f3a565b88612b7e565b9491969097604051941693806108b58a8a893397859094939260609260808301968352602083015260408201520152565b610c06919550610baf92945060603d60601161035b5761034a81836121f3565b959194929050610ba0565b346102e257610c1f366120a5565b6001600160a01b039493929490838286169381610e93575b604089610c44858a6123f7565b82517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911660248201526044810193909352826064816000895af19182156102ef57600090600093610e6f575b50600093600098604051630b2339af60e21b81526060816004818c5afa9384156102ef57600091600095610e4a575b508093600192610ce182612e50565b15610e17575b505050610d45575b5050505090610cfd916123ea565b9485106106b957604095865193845285602085015216917fac97b87f5422fa3beec99bff8f336310d8ebc7d33d909b7d534cd7c72f61e871863392a482519182526020820152f35b90610d6b610d63610d5d610d739695949c979c612778565b93613919565b9336906122a4565b924292614a87565b50916040519060008252610d86826121bb565b6040848b610dc0835195869384937f5b709f1700000000000000000000000000000000000000000000000000000000855260048501612377565b038160008a5af180156102ef57610cfd94610de793600092610df257506104cc91926123ea565b959091898080610cef565b6104cc9250610e0f9060403d6040116103295761031981836121f3565b9050916104c1565b8a169c50929750610e2c935090508a8d6130a5565b909a91969183838315610ce757610e4292613850565b8d8083610ce7565b909450610e66915060603d60601161035b5761034a81836121f3565b9490508e610cd2565b9050610e8b91925060403d6040116103295761031981836121f3565b91908a610ca3565b610e9f82883388614358565b610c37565b346102e25760031960a0813601126102e257610ebe612008565b610ec661201e565b906064359167ffffffffffffffff938484116102e25760a08185360301126102e2576084359485116102e25760a09085360301126102e25760405191630b2339af60e21b83526060836004816001600160a01b0386165afa9283156102ef576000936113db575b506044356113bf575b6040517f2f13b60c00000000000000000000000000000000000000000000000000000000815260009560209182816004816001600160a01b0389165afa9081156102ef576000916113a2575b50156111925750604051630b2339af60e21b81526060816004816001600160a01b0388165afa80156102ef576001600160a01b0391600091611170575b50604080517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015293909216808416602484015260448035908401529392829060649082906000908a165af19081156102ef576000938391859361114e575b506024604051809681937fbcb7ea5d0000000000000000000000000000000000000000000000000000000083526001600160a01b038c1660048401525af19182156102ef5760009261111c575b5061108692506123ea565b915b6001831061026b576001600160a01b036110b96110b06108d59686848a600401921687613d97565b96600401612275565b16917f5258a3c624debb1cc84b0f5f66c73eef048832eeebe7178e63e95a53cf28dc946001600160a01b03604051931692806108b5878a33966044359085909493926060926001600160a01b036080840197168352602083015260408201520152565b90915082813d8311611147575b61113381836121f3565b810103126102e2576110869151908861107b565b503d611129565b61116891935060403d6040116103295761031981836121f3565b50918a61102e565b611189915060603d60601161035b5761034a81836121f3565b91505088610fbf565b9550506111f860406111a787600401856123f7565b81517ff6b911bc0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091166024820152604480359082015291829081906064820190565b038160006001600160a01b0388165af19081156102ef57600090600092611380575b5060009160009760405190630b2339af60e21b82526060826004816001600160a01b038b165afa9182156102ef5760009261135c575b508260019261126183600401612e50565b15611311575b505050611280575b509061127a916123ea565b91611088565b60408051600081529298926112d592611298826121bb565b825193849283927f29910b110000000000000000000000000000000000000000000000000000000084526001600160a01b038c1660048501612377565b038160006001600160a01b038a165af19283156102ef5761127a93611309926000906000926104da57506104cc91926123ea565b96909161126f565b919550925061133c9399506001600160a01b039150169260040190836001600160a01b0388166130a5565b90989193919291828783156112675761135492613850565b898087611267565b61137691925060603d60601161035b5761034a81836121f3565b509050908a611250565b905061139b915060403d6040116103295761031981836121f3565b908761121a565b6113b99150833d85116105ac5761059e81836121f3565b88610f82565b6113d660443583336001600160a01b038216614358565b610f36565b6113f591935060603d60601161035b5761034a81836121f3565b50509185610f2d565b346102e25761140c366120a5565b9290939160405194630b2339af60e21b86526060866004816001600160a01b0388165afa9081156102ef57600096600092611695575b5061144d86866123f7565b848061167a575b5050600091849760009761146781612e50565b15611637575b50509061149b91878961149361148b6114858b612778565b94613919565b9436906122a4565b9342936140ae565b5050906114e660408051600081526114b2816121bb565b8151809381927f5b709f17000000000000000000000000000000000000000000000000000000008352878b60048501612377565b038160006001600160a01b038b165af19788156102ef57611578986060946115289360009060009361160d575b50611522906104cc93946123dd565b996123ea565b9560405197889283927f156e29f60000000000000000000000000000000000000000000000000000000084528b600485016040919493926001600160a01b03606083019616825260208201520152565b038160006001600160a01b0388165af19485156102ef576000956115ea575b508410610a61576001600160a01b03806040968751938452866020850152169216907fb51950711c9b21dc7888d41f68a19540231ffb5f0d19d8f75cbccaf90ffa7fa5863392a482519182526020820152f35b61160491955060603d606011610ad057610abe81836121f3565b50509386611597565b6104cc9350611522915061162f9060403d6040116103295761031981836121f3565b935090611513565b81995061149b939298506116729450866001600160a01b0361165a9316896130a5565b50989198949098886001600160a01b03829c16613850565b90918a61146d565b61168e91336001600160a01b038b16614358565b8884611454565b9096506116b1915060603d60601161035b5761034a81836121f3565b9196905088611442565b346102e2576116c9366120a5565b9290939160009360405190630b2339af60e21b82526060826004816001600160a01b0389165afa9687156102ef57611795976000936000916118fc575b5061171183886123f7565b86806118e1575b90509360009361172781612e50565b1561189f575b50509061174d91838561174561148b6114858c612778565b9342936139b3565b5050916040805160008152611761816121bb565b8151809a81927f29910b11000000000000000000000000000000000000000000000000000000008352878b60048501612377565b038160006001600160a01b038b165af180156102ef576117dc9860609461152893600092600094611871575b506117d692916117d0916123dd565b946123ea565b976123ea565b038160006001600160a01b0388165af19485156102ef5760009561184e575b508410610a61576001600160a01b03806040968751938452866020850152169216907fc87b85efc5055ef177e0092af0d4e624fff4b1d57db748857f65e4b7e4a28a36863392a482519182526020820152f35b61186891955060603d606011610ad057610abe81836121f3565b505093866117fb565b6117d09194506117d693506118949060403d6040116103295761031981836121f3565b9490939091506117c1565b61174d939299508195506118d99450876001600160a01b036118c293168a6130a5565b509991949094896001600160a01b03829816613850565b90918b61172d565b6118f591336001600160a01b038816614358565b8a86611718565b905061191891935060603d60601161035b5761034a81836121f3565b939150928a611706565b61192b36612048565b939291906001600160a01b03938484169160405193630b2339af60e21b8552606085600481875afa9586156102ef576108d596600096600091611a0a575b509061198793929161197e8b8b8a1630612476565b97889287612b7e565b9391969097602061199782612275565b918360405196168652013560208501528760408501528860608501528460808501528560a085015216917fa9b749795680682fbc5a34071e19282bbb23496a8cf9bbd99bf941359bbe65bf60c03392a4604051948594859094939260609260808301968352602083015260408201520152565b6119879493929750611a2b915060603d60601161035b5761034a81836121f3565b979190509690919293611969565b60031960a0813601126102e257611a4e612008565b90611a5761201e565b916044359267ffffffffffffffff84116102e25760a0846004019385360301126102e2576001600160a01b039182821660405195630b2339af60e21b87526060958688600481865afa9788156102ef57600090600099611c53575b508187611ac0921687612476565b94611ad9611acd82612778565b429088606435916128c1565b9b9250809391508803611c0f57611b47928a928c809381611bfa575b50505060405193849283927f156e29f60000000000000000000000000000000000000000000000000000000084528a600485016040919493926001600160a01b03606083019616825260208201520152565b03816000885af19788156102ef57600098611bd9575b50506084358710610a61576108d595611b967f8969c3e485cb9f3b23622228064bc63e7350f6cf343dd86ab86169041a91eaae92612275565b6108b5878a8c60405195869516996024339901359086919260809396959491966001600160a01b0360a08501981684526020840152604083015260608201520152565b611bf0929850803d10610ad057610abe81836121f3565b5050958880611b5d565b611c07928d339116614358565b8c8281611af5565b606460405162461bcd60e51b815260206004820152601960248201527f536c6970706167653a204e4f545f414c4c5f53595f55534544000000000000006044820152fd5b879950611ac09150611c7283918a3d8c1161035b5761034a81836121f3565b509a509150611ab2565b60031990610140823601126102e257611c93612008565b611c9b61201e565b60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102e25767ffffffffffffffff908161010435116102e25760a08561010435360301126102e25761012435948286116102e25760a0908660040196360301126102e2576001600160a01b03630b2339af60e21b85526060856004818486165afa9283156102ef57600095600094611fdf575b50611d5382611d4289866123f7565b971696876101043560040191612476565b936000918597600099611d6581612e50565b15611fb3575b5050611d7f611d7986612778565b92613919565b91604051918260a08101109060a084011117611f84578989611dce9460a085016040526064358552608435602086015260a435604086015260c435606086015260e435608086015242936140ae565b505090611e196040805160008152611de5816121bb565b8151809381927f5b709f17000000000000000000000000000000000000000000000000000000008352878a60048501612377565b03816000888a165af19788156102ef57611ea498606094611e5493600090600093611f5a575b50611e4e906104cc93946123dd565b9b6123ea565b9760405197889283927f156e29f600000000000000000000000000000000000000000000000000000000845289600485016040919493926001600160a01b03606083019616825260208201520152565b038160008587165af19485156102ef57600095611f37575b506044358510610a61576108d5937f387bf301bf673df0120e2d57e639f0e05e5e03d5336577c4cd83c1bff96e8dee611efa61010435600401612275565b604080516001600160a01b0390941684526101043560240135602085015283018890526060830186905283169390921691339180608081016108b5565b611f5191955060603d606011610ad057610abe81836121f3565b50509386611ebc565b6104cc9350611e4e9150611f7c9060403d6040116103295761031981836121f3565b935090611e3f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b909850611fc9919950611fd893508689876130a5565b5099919993909986819a613850565b8980611d6b565b909350611ffc91955060603d60601161035b5761034a81836121f3565b95919050949287611d33565b600435906001600160a01b03821682036102e257565b602435906001600160a01b03821682036102e257565b35906001600160a01b03821682036102e257565b9060031960a0818401126102e2576001600160a01b039260043584811681036102e2579360243590811681036102e2579260443592606435926084359167ffffffffffffffff83116102e2578260a0920301126102e25760040190565b60031991610140838301126102e2576001600160a01b039260043584811681036102e2579360243590811681036102e25792604435926064359260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c8401126102e257608492610124359167ffffffffffffffff83116102e2578260a0920301126102e25760040190565b60031960a09101126102e2576001600160a01b039060043582811681036102e2579160243590811681036102e25790604435906064359060843590565b67ffffffffffffffff8111611f8457604052565b610120810190811067ffffffffffffffff821117611f8457604052565b60c0810190811067ffffffffffffffff821117611f8457604052565b6020810190811067ffffffffffffffff821117611f8457604052565b6080810190811067ffffffffffffffff821117611f8457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611f8457604052565b908160609103126102e2578051916001600160a01b039283811681036102e25792602083015181811681036102e25760409093015190811681036102e25790565b356001600160a01b03811681036102e25790565b908160609103126102e2578051916040602083015192015190565b91908260a09103126102e25760405160a0810181811067ffffffffffffffff821117611f84576040526080808294803584526020810135602085015260408101356040850152606081013560608501520135910152565b91908260409103126102e2576020825192015190565b60005b8381106123245750506000910152565b8181015183820152602001612314565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361237081518092818752878088019101612311565b0116010190565b61239c93926001600160a01b0360609316825260208201528160408201520190612334565b90565b9060001982019182116123ae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116123ae57565b919082018092116123ae57565b9061240190612e50565b61239c57503090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156102e2570190565b6004111561244757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91906080820192612487848461240a565b936000943560048110156127745761249e8161243d565b8061259c57505090608460209260406124b686612275565b6124c68688013580923390613f3a565b955b016001600160a01b038094816124dd84612275565b16612592576124ff88935b6124fa836124f583612275565b6143b5565b612275565b9782604051998a9889977f20e8c565000000000000000000000000000000000000000000000000000000008952166004880152166024860152604485015260016064850152165af19182156125865791612557575090565b90506020813d60201161257e575b81612572602093836121f3565b810103126102e2575190565b3d9150612565565b604051903d90823e3d90fd5b6124ff89936124e8565b806125a860039261243d565b036125f3575090608460209260406125bf86612275565b6125cf8688013580923390613f3a565b6125ed816125dc89612275565b6125e7858b01612275565b90613ffc565b956124c8565b6001600160a01b038061260586612275565b1661273657602085013534036126f2575b8061262360608701612275565b169061262e86612275565b166126eb576020850135915b61264d61264687612275565b918761240a565b92823b156126e75791612698939188936040518096819582947f2bdb823c00000000000000000000000000000000000000000000000000000000845260208d01359060048501613d1a565b03925af180156126dc576126c3575b5090608460209260406125ed6126be828801612275565b613f6b565b60209291946126d360849261216e565b949192506126a7565b6040513d87823e3d90fd5b8780fd5b859161263a565b606460405162461bcd60e51b815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b8061274086612275565b1661274d60608701612275565b60208701359081612761575b505050612616565b61276c923390614358565b388080612759565b8580fd5b6040805161278581612182565b60009283825283602083015283838301528360608301528360808301528360a08301528360c08301528360e083015283610100809301526001600160a01b0380948451927f794052f300000000000000000000000000000000000000000000000000000000845230600485015283602481610120998a94165afa9586156128b5578196612816575b50505050505090565b9091928094959650813d83116128ae575b61283181836121f3565b810103126128ab5784519461284586612182565b83518652602084015160208701528084015190860152606083015191821682036128ab575090829160608501526080810151608085015260a081015160a085015260c081015160c085015260e081015160e085015201519082015238808080808061280d565b80fd5b503d612827565b508451903d90823e3d90fd5b919293907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082116102e2578085116102e25760009582158015612b2a575b612b005760a08501511115612ad657604084019586518015600014612a5857505061292b858361428a565b90600082126102e25760006003831115612a495750816001908060011c600181018091116123ae5791905b848310612a29575050505b81116102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1881019081136001166123ae57946103e89194935b60008713156129ff57602081016129b487825161433c565b90526129c185825161433c565b90526129d76129d0838861433c565b825161433c565b9052600081126102e25793600081126102e25792600081126102e25791600081126102e25790565b60046040517fccbf5468000000000000000000000000000000000000000000000000000000008152fd5b90919350612a4084612a3b8184612b45565b6123ea565b821c9190612956565b91156129615760019150612961565b86979250612a6c90612a749294969761428a565b8651906142c9565b612a7f82518661428a565b94612a9060208801968751906142c9565b80831215612ab8575050612aaa81612ab29298965161428a565b8251906142c9565b9461299c565b612aaa91985080979650612ad092509796865161428a565b9361299c565b60046040517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b60046040517f25daaec3000000000000000000000000000000000000000000000000000000008152fd5b508515612900565b818102929181159184041417156123ae57565b8115612b4f570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b959096939492612b8d88612778565b93612b9782613919565b9885519260009a848c80961261277457612bb1908b612b32565b96885191868312612df8576020809a0151908782126126e7578d998894612bda88938e95612b32565b670de0b6b3a76400009004612bee916123ea565b612bf791612b45565b612c03819e82906123dd565b9586836001600160a01b0380809816931693612c20908585613850565b612c2992613850565b604080517fdb74aa150000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529b90921660248c0152909997889160449183915af1958615612dee578296612db6575b50926060928692612cdf95849e8b51978896879586937f156e29f6000000000000000000000000000000000000000000000000000000008552600485016040919493926001600160a01b03606083019616825260208201520152565b0393165af1998a15612dab5799612d88575b508810612d445710612d01575050565b60649250519062461bcd60e51b82526004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f59545f4f55540000006044820152fd5b825162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f4c505f4f55540000006044820152606490fd5b612da291995060603d606011610ad057610abe81836121f3565b50509738612cf1565b8551903d90823e3d90fd5b9293909195508883813d8311612de7575b612dd181836121f3565b8101031261277457915194919291906060612c83565b503d612dc7565b88513d84823e3d90fd5b8680fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e2570180359067ffffffffffffffff82116102e257602001918160051b360383136102e257565b612e5d6040820182612dfc565b9050159081612e6a575090565b612e7991506060810190612dfc565b90501590565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e2570180359067ffffffffffffffff82116102e2576020019181360383136102e257565b67ffffffffffffffff8111611f8457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6080818303126102e25780519260208201519260408301519260608101519067ffffffffffffffff82116102e2570181601f820112156102e2578051612f4f81612ed0565b92612f5d60405194856121f3565b818452602082840101116102e25761239c9160208085019101612311565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156102e257016020813591019167ffffffffffffffff82116102e25781360383136102e257565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9015613043578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156102e2570190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81813603018212156102e2570190565b919390936000936000936001600160a01b036130c083612275565b1690839760408401906130d38286612dfc565b9050613542575b505060608301916130eb8385612dfc565b9050613113575b505050670de0b6b3a764000091602061310d92013590612b32565b04841190565b61314060a061313a61313461312e87899c9e9d9a9899612dfc565b9061300a565b80613072565b01612275565b606061315261313461312e888c612dfc565b01359460048610156102e2576131706001600160a01b03918a612dfc565b929061317f60808c018c612e7f565b9390966040519961318f8161243d565b60208b015281841660408b01528d60608b0152166080890152608088528760a081011067ffffffffffffffff60a08a011117611f845760a088016040527f6122b1730000000000000000000000000000000000000000000000000000000060a089015283610144890160a060a48b015252610164808901908560051b8a010194826000905b82821061334d57505050505091613272916001600160a01b0360009695941660c489015260001960e48901527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c9485898403016101048a0152612fcb565b91858303016101248601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60856132ad60a082019482612334565b0301908360a08701915af19182156102ef5761330561310d93602092670de0b6b3a76400009660009160009361330f575b506132ff6132f884878061152296975183010191016122fb565b90926123ea565b9a6123dd565b95928294506130f2565b6132f8935061152292506133416132ff9160a0803d8060008386013e613337818386016121f3565b8301019101612f0a565b965094506132de915050565b90919293967ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9c8c820301855287357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112156102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818382013603018382013512156102e257606080835281840180350180358483015260208101356080850152604081013560a0850152600491013510156102e25760019160209182916040808761352e61351260c061342e8489018035016060013561243d565b8784018035016060810135888301526134ff9061344d90608001612034565b6001600160a01b031660e089810191909152916134b7613497613477888d0180350160a001612034565b6001600160a01b03166101008c81019190915292888d0180350101612034565b936001600160a01b036101209516858c0152878c01888d01350101612034565b6001600160a01b03166101408a8101919091528a870180350191820135610160808c019190915293820135610180808c0191909152908201356101a08b015292810190612f7b565b90916101c08901526101e0880191612fcb565b613521878401808a0190612f7b565b908783038a890152612fcb565b940101359101529901950193920190613214565b9092985083975061356a9196506001600160a01b0361356361357095612275565b91166143b5565b85612dfc565b61357f60808793970183612e7f565b9690916040519060008252613593826121bb565b6040519889937f6122b1730000000000000000000000000000000000000000000000000000000085528260a4860160a060048801525260c4850160c48460051b87010193826000905b82821061368a57505050505093839261361d61362c936000976001600160a01b038d1660248801528a60448801526003199485888403016064890152612fcb565b91848303016084850152612334565b0381838a5af19586156102ef576000809660009861365a575b506136519096846123dd565b969438806130da565b9050613651975061367f9196503d806000833e61367781836121f3565b810190612f0a565b509790969190613645565b919396977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c9087929496970301855286357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112156102e2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818382013603018382013512156102e25782810183820135016060835280356060840152602091828201356080850152604082013560a085015260608201359360048510156102e257604080876138076135126001600160a01b036134ff8a99826137cf6137b660019f8c9060c080926137808361243d565b01528c61378f60808701612034565b60e0988991169101528c6137a560a08701612034565b610100958691169101528401612034565b946001600160a01b036101209616868d01528301612034565b6001600160a01b036101409116818c015261016091830135828c015261018094830135858c01528201356101a08b0152810190612f7b565b940101359101529801950192018d9796959493916135dc565b3d1561384b573d9061383182612ed0565b9161383f60405193846121f3565b82523d6000602084013e565b606090565b8215613914576001600160a01b0390811690816138c6575050600080809381935af161387a613820565b501561388257565b606460405162461bcd60e51b815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b9261391293604051937fa9059cbb00000000000000000000000000000000000000000000000000000000602086015216602484015260448301526044825261390d826121d7565b614c3a565b565b505050565b60206001600160a01b03600460009360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af19081156102ef57600091612557575090565b1561396f57565b606460405162461bcd60e51b815260206004820152600e60248201527f6e6f206578697374696e67206c700000000000000000000000000000000000006044820152fd5b94959291906139f5604051956139c88761219f565b878752602087019280845260408801948552606098606089019687528260808a01528a60a08a015261461b565b94604088015115613b21575b60005b87890151811015613adc5786908986613a7b613a74613a906080613a868b858b613a808e613a50613a358e8e61492e565b9e8f9451925196519c5196613a4986614c0d565b9184615191565b613a6f836020949e94613a67949e948988516123ea565b9601516123dd565b6123dd565b958b6123ea565b612b32565b986123dd565b95015185856149b0565b613acb57505011613ab257600182018092116123ae576001918a525b01613a04565b60001982019182116123ae5760019160208b0152613aac565b949c509a5092985050505050505050565b60405162461bcd60e51b815260206004820152601a60248201527f536c6970706167653a20415050524f585f4558484155535445440000000000006044820152606490fd5b602088018051825160009060208a01613b3a815161239f565b808403613bda575081519051613b4f9161433c565b670d529ae9e860000090808202918205036123ae57670de0b6b3a7640000613b7992519105614323565b600081126102e25780821015613bd357505b80821015613bcc57505b808252845180821015613bc45750905b52613baf886148bd565b613bbf6040825101511515613968565b613a01565b905090613ba5565b9050613b95565b9050613b8b565b613be481856123ea565b60018082018092116123ae571c908351613bff838551614323565b613c09828561433c565b6000821380613cf8575b15613cb4578f613c90670de0b6b3a764000091613c8b613c76613c71613c9797613c66613c6b613c538f8f9060009e613c4d91519061433c565b9061428a565b613c66613c60858d61428a565b91614256565b614d5f565b98614256565b61548b565b6040613c828451614d45565b93015195614323565b61428a565b0590614323565b1215613cac5750613ca79061239f565b613b3a565b935092613b3a565b606460405162461bcd60e51b815260206004820152601260248201527f696e76616c6964207074546f4d61726b657400000000000000000000000000006044820152fd5b5060008113613c13565b908160209103126102e2575180151581036102e25790565b916001600160a01b038092168352602083015260606040830152823560048110156102e257613d488161243d565b6060830152613d5960208401612034565b1660808201526060613d82613d716040850185612f7b565b608060a086015260e0850191612fcb565b920135908115158092036102e25760c0015290565b93929360808501613da8818761240a565b3560048110156102e257613dbb8161243d565b80613e20575050602092613dd0928692614a05565b925b01358210613ddc57565b606460405162461bcd60e51b815260206004820152602060248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152fd5b80613e31600392989596949861243d565b03613e765750613e4882613e719260209530614a05565b8095613e6382613e5a60408701612275565b6125e787612275565b613e6c84612275565b613850565b613dd2565b90613ea0613e9a846001600160a01b03936060820197613e9589612275565b614a05565b94612275565b16613eb7613eb060408501612275565b928461240a565b90803b156102e257613efd9460008094604051978895869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501613d1a565b03925af19182156102ef57602092613f2b575b50613e71613f206126be83612275565b8095613e6c84612275565b613f349061216e565b38613f10565b9091906001600160a01b031680613f565750905034036126f257565b81613f6057505050565b613912923091614358565b6000906001600160a01b031680613f825750504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa918215612586578092613fcb57505090565b9091506020823d602011613ff4575b81613fe7602093836121f3565b810103126128ab57505190565b3d9150613fda565b6001600160a01b03919082168061405d575016803b156102e2576000906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af180156102ef576140545750565b6139129061216e565b92915050813b156102e2576000916024839260405194859384927f2e1a7d4d00000000000000000000000000000000000000000000000000000000845260048401525af180156102ef576140545750565b919095929495604051906140c18261219f565b8382526020946140f78684019783895260408501958652606093606086019a8b5260809782608088015260a087019c8d5261461b565b868a51604081015115614211575b505060005b8a519084820151811015613adc578b87876141498c8f8f979061413f8f92896141329161492e565b809a8c8851915191615191565b9691959095614c0d565b958a885188116141ee5761418b61419294613a7b83614183613a7b96613a6f8e61419d9d61417a829a8d51516123dd565b9b5101516123ea565b9251906123ea565b98516123dd565b9551015185856149b0565b6141d9575050116141c057600182018092116123ae576001918c51525b0161410a565b60001982019182116123ae57600191898d5101526141ba565b9d509d50505050965050955050505050929190565b9750505050505050506000199150019182116123ae57600191898d5101526141ba565b015161421f85515183614b83565b8082101561424f57505b878b5101526142388a516148bd565b6142486040855101511515613968565b8638614105565b9050614229565b90670de0b6b3a7640000918281029281840514901517156123ae57565b90816000039180830560001914901517156123ae57565b8181029291600082127f80000000000000000000000000000000000000000000000000000000000000008214166123ae5781840514901517156123ae57565b8115612b4f5760001982147f80000000000000000000000000000000000000000000000000000000000000008214166123ae570590565b90670de0b6b3a7640000600083820393128184128116918413901516176123ae57565b818103929160001380158285131691841216176123ae57565b919091600083820193841291129080158216911516176123ae57565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0392831660248201529290911660448301526064808301939093529181526139129161390d6084836121f3565b906001600160a01b039081831692831561461557604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03841660248201526020959193918690829060449082905afa801561460a576000906145d1575b6b7fffffffffffffffffffffff915010614440575b5050505050565b825193600080878701927f095ea7b300000000000000000000000000000000000000000000000000000000948585521692836024890152604497828982015288815261448b816121d7565b519082875af1614499613820565b816145a1575b501561455f5791600092918380938651908982019384526024820152600019888201528781526144ce816121d7565b51925af16144da613820565b8161452f575b50156144ed578080614439565b606492917f5361666520417070726f7665000000000000000000000000000000000000000091519262461bcd60e51b84526004840152600c6024840152820152fd5b80518015925085908315614547575b505050386144e0565b6145579350820181019101613d02565b38848161453e565b6064867f5361666520417070726f766500000000000000000000000000000000000000008787519262461bcd60e51b84526004840152600c6024840152820152fd5b805180159250889083156145b9575b5050503861449f565b6145c99350820181019101613d02565b3887816145b0565b508581813d8311614603575b6145e781836121f3565b810103126102e2576b7fffffffffffffffffffffff9051614424565b503d6145dd565b84513d6000823e3d90fd5b50505050565b92919260409081516080810181811067ffffffffffffffff821117611f8457835260009182825260208201908382528483018481526060840196858852849960a084018181511115614894579061467291516123dd565b936080840151976301e1338096878a0299808b05891490151715614867577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff998a881161486357876146c3916142c9565b8981131561483357815260208601518981121561482b57600019905b8a81131561481d575b6146fc670de0b6b3a7640000968792612b32565b04908b82116147db579061470f9161428a565b80845286519081158015614815575b6147df5750508551918861473c896101008a01519651945196612b32565b048b81116147db5761474d90614db4565b9485126147ab57509261478660c09593613c6661478161477c86613c66613c606147959e9d9b61478c9a61433c565b61543f565b614256565b90614323565b90520151612b32565b049182116128ab57506147a790614db4565b9052565b8460249151907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b8a80fd5b604492508351917fb1c4aefb00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50801561471e565b61482690614c0d565b6146e8565b6001906146df565b6024908351907f1ca418760000000000000000000000000000000000000000000000000000000082526004820152fd5b8980fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b600489517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b8051602082015110908115614918575b506148d457565b606460405162461bcd60e51b815260206004820152601f60248201527f496e7465726e616c3a20494e56414c49445f415050524f585f504152414d53006044820152fd5b670de0b6b3a764000091506080015111386148cd565b9015806149a3575b61499c57602081519101518082111561498d57606460405162461bcd60e51b815260206004820152601d60248201527f536c6970706167653a2067756573734d696e203e2067756573734d61780000006044820152fd5b614996916123ea565b60011c90565b6040015190565b5060408101511515614936565b90670de0b6b3a7640000908382038281116123ae57826149d1859284612b32565b04111593846149e2575b5050505090565b909180939450018083116123ae576149f991612b32565b041015388080806149db565b60a4604091602093614a24966001600160a01b03978895869201612275565b60405197889687957f769f8e5d0000000000000000000000000000000000000000000000000000000087521660048601526024850152166044830152600096879182606485015260016084850152165af1918215612586578092613fcb57505090565b9490939192614a9790858761461b565b92604083015115614b50575b60005b6060840151811015613adc57614abc818561492e565b614ad3614acb8289898c615191565b509190614c0d565b84811180159190614b3357608088015182614b09575b5050614afc575084526001905b01614aa6565b9750945050509250509190565b909150670de0b6b3a76400009081038181116123ae57614b299087612b32565b0411153880614ae9565b5050509060001982019182116123ae576001916020860152614af6565b602083018051614b61885187614b83565b80821015614b7b5750905b52614b76836148bd565b614aa3565b905090614b6c565b90614bb1614bb7614b9d6060850151604086015190614323565b670de0b6b3a764000092839186519061428a565b05614db4565b9281840190828212600086129080158216911516176123ae57613c4d6020614be8613c9094613c66614bf199614256565b9201518561433c565b6103e7908181029181830414901517156123ae576103e8900490565b7f800000000000000000000000000000000000000000000000000000000000000081146123ae5760000390565b6001600160a01b0316604051604081019181831067ffffffffffffffff841117611f8457614caa926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1614ca4613820565b91615981565b805190828215928315614d2d575b50505015614cc35750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b614d3d9350820181019101613d02565b388281614cb8565b8015612b4f576ec097ce7bc90715b34b9f10000000000590565b8115612b4f570590565b15614d7057565b606460405162461bcd60e51b815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008112158061517e575b614de790614d69565b60008112615169576064906806f05b59d3b20000008112615106577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156150cd575b806856bc75e2d63100000084921215615093575b682b5e3af16b1880000081121561505b575b6815af1d78b58c400000811215615023575b680ad78ebc5ac6200000811215614fec575b81811215614fb5575b6802b5e3af16b1880000811215614f7e575b68015af1d78b58c40000811215614f47575b60028282800205056003838383020505600484848302050560058585830205056006868683020505600787878302050590600888888402050592600989898602050594600a8a8a8802050596600b8b8b8a02050598600c8c8c8c0205059a0101010101010101010101010205020590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000083920193020591614ed6565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000083920193020591614ec4565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000083920193020591614eb2565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000083920193020591614ea9565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000083920193020591614e97565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000083920193020591614e85565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000083920193020591614e73565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001614e5f565b6803782dace9d90000008112615156577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092614e4a565b68056bc75e2d6310000082600192614e4a565b61517590600003614db4565b61239c90614d45565b5068070c1cc73b00c80000811315614dde565b939192845160208301518351906040850151928481126153fb57613c66613c606151c5936151bf8885614323565b9361433c565b670d529ae9e86000008082136153c457506151ef9291613c666147816151ea9361543f565b61433c565b670de0b6b3a76400009081811261536c57606061521761521283613c6687614256565b614273565b94015190600080941360001461539d5781613c6661523492614256565b82811261536c57508161525161524b60e093614300565b8661428a565b05965b0151917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9283811161536857876064615290615297938361428a565b0595614323565b91818312801561534d571561534557600019925b82811315615337575b81810291818304149015171561530a57866152ce916123ea565b600019810190811161530a57866152e491612b45565b9283116128ab57506152fd61239c93926153049261428a565b95856155b2565b936155b2565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b61534090614c0d565b6152b4565b6001926152ab565b50505061239c92915061536361530491866155b2565b6152fd565b5080fd5b602490604051907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b506153be615212826153b96153b360e095614300565b8861428a565b6142c9565b96615254565b60449250604051917ffc68d09e00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b606460405162461bcd60e51b815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b670de0b6b3a7640000811461546157613c7181613c66613c6061239c94614300565b60046040517fa9c8b14d000000000000000000000000000000000000000000000000000000008152fd5b600081131561556e5780670c7d713b49da0000128061555d575b1561555457670de0b6b3a7640000906ec097ce7bc90715b34b9f1000000000906154f8908302828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302614d5f565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b0590565b61239c90615635565b50670f43fc2c04ee000081126154a5565b606460405162461bcd60e51b815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b600082121561562d57600019915b600081131561561e57905b670de0b6b3a7640000918281029281840414901517156123ae576155ee91612b45565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116102e25761239c9161428a565b61562790614c0d565b906155cb565b6001916155c0565b670de0b6b3a7640000811261596a5760649060007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561593f575b73011798004d755d3c8bc8e03204cf44619e00000082121561591e575b820290808302906e01855144814a7ff805980ff008400090818312156158fb575b50506b02df0ab5a80a22c61ab5a700808212156158db575b50693f1fce3da636ea5cf850808212156158bb575b50690127fa27722cc06cc5e28082121561589b575b5068280e60114edb805d038082121561587b575b50680ebc5fb4174612111080821215615864575b506808f00f760a4b2db55d80821215615844575b506806f5f177578893793780821215615824575b506806248f33704b28660380821215615805575b506805c548670b9510e7ac808212156157e6575b506157a568056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102614d5f565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b010590565b68056bc75e2d631000006756bc75e2d631000092020591019038615769565b68056bc75e2d6310000067ad78ebc5ac62000092020591019038615755565b68056bc75e2d6310000068015af1d78b58c4000092020591019038615741565b68056bc75e2d631000006802b5e3af16b18800009202059101903861572d565b68056bc75e2d631000008092020591019038615719565b68056bc75e2d63100000680ad78ebc5ac620000092020591019038615705565b68056bc75e2d631000006815af1d78b58c400000920205910190386156f1565b68056bc75e2d63100000682b5e3af16b18800000920205910190386156dc565b68056bc75e2d631000006856bc75e2d631000000920205910190386156c7565b68ad78ebc5ac62000000925069021e19e0c9bab2400000020591019038806156af565b906b1425982cf597cd205cef73806803782dace9d90000009105910161568e565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615671565b61597661597b91614d45565b615635565b60000390565b919290156159e25750815115615995575090565b3b1561599e5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156159f55750805190602001fd5b6102b09060405191829162461bcd60e51b835260206004840152602483019061233456fea26469706673582212205c76cfae156c84c190cb7ea5c3d45b9607d08b24bcc8a65e259fa4110a56517764736f6c63430008170033";
2693
2693
 
2694
2694
  type ActionAddRemoveLiqV3ConstructorParams =
2695
2695
  | [signer?: Signer]