游畅
2023-04-29 cc266a1e4080bb3ecc47ea4a202dd549545111e1
force-app/main/default/classes/ConsumEquipmentSetShipmentController.cls
@@ -22,7 +22,7 @@
        //各ページに制御あれば、最大件数を指定する
        // searchNumMax = Integer.valueOf(Label.Product_Select_Limit);
        // searchNumMax = 20;
        pagesize = '500';
        pagesize = '400';
        return searchNumMax;
    }
@@ -41,8 +41,12 @@
        selectedDataSql += '   and Cancel_Select__c = False';
        //selectedDataSql += ' order by Id ASC nulls last';
        keepWher = selectedDataSql;
        selectedDataSql = ' From Consum_Apply_Equipment_Set_Detail__c' + selectedDataSql + ' order by Fixture_Model_No_F__c nulls last, Consumable_Guaranteen_end_F__c nulls last';
        myComponentController.columnRightRW.put('Inspection_Cnt_Jia__c', 'w');
        selectedDataSql = ' From Consum_Apply_Equipment_Set_Detail__c' + selectedDataSql + ' order by Fixture_Model_No_F__c nulls last, Consumable_Guaranteen_end_F__c nulls last,Name';
        myComponentController.columnRightRW.put('Inspection_Cnt_Jia__c', 'r');//update      wangweipeng      2022/01/12
        //add by yc 2021-11-26 start
        //myComponentController.columnRightRW.put('EquipmentManagementCode__c', 'r');
        //myComponentController.columnRightRW.put('ManagementCode__c', 'r');
        //add by yc 2021-11-26 end
        return selectedDataSql;
    }
@@ -76,10 +80,16 @@
    public override List<String> getColumnFieldList() {
        // strColumus 里加 field
        // FixtureUtil#raesdGroupBy()の項目も必要
        return new List<String>{'Id', 'Asset__c', 'DeliverySlip__c', 'Shippment_loaner_time__c', 'Consum_Apply__r.demo_purpose2__c', 'Consum_Apply__r.Shipment_requested_cnt__c', 'Shipment_Saved_Flg__c', 'Shipment_request_time2__c', 'Consum_Apply_Equipment_Set__r.Yi_Shipment_request__c'};
        return new List<String>{'Id', 'Asset__c','Consum_Apply__r.AccDealerBlacklist__c', 'DeliverySlip__c', 'Shippment_loaner_time__c', 'Consum_Apply__r.demo_purpose2__c', 'Consum_Apply__r.Shipment_requested_cnt__c', 'Shipment_Saved_Flg__c', 'Shipment_request_time2__c', 'Consum_Apply_Equipment_Set__r.Yi_Shipment_request__c','Inspection_Cnt_Jia__c','EquipmentManagementCode__c','ManagementCode__c','boxbarcodeforReceipt__c'};
    }
    //隐藏的字段只能显示,不能赋值
    public override List<String> getHiddenFieldList() {
        return new List<String>{'Product_Serial_No_F__c'};
    }
    // add by youc 2021-12-03 start 设置大码,小码
    // 画面里直接可以输入的項目 List 在字段集里也添加了  设置读写
    public override List<String> getWritableColumnFieldList() {
        return new List<String>{'EquipmentManagementCode__c','ManagementCode__c','boxbarcodeforReceipt__c'};
    }
    // getObjName 连 getOriginObjName 的 FK
    public override String getFKColumnField() {
@@ -107,7 +117,7 @@
    }
    public override String getOrderbyStr() {
        return ' order by Fixture_Model_No_F__c nulls last, Consumable_Guaranteen_end_F__c nulls last';
        return ' order by Fixture_Model_No_F__c nulls last, Consumable_Guaranteen_end_F__c nulls last,Name';
    }
    public override Boolean getIsNeedRunSearch() {
@@ -218,13 +228,57 @@
        done_flg = false;
        if (readOnly) return;
        Map<String, Integer> sendAssetKey = new Map<String, Integer>();
        //add by rentx 2021-10-22 start 设置小码 设置管理编码 下面设置完之后就清空了
        Map<Id,List<String>> xiaomaMap = new Map<Id,List<String>>();
        //add by youc 2021-12-06 保存之后,再次设置小码 显示页面
        Map<Id,List<String>> xiaomaMap1 = new Map<Id,List<String>>();
        Map<Id,List<String>> bianmaMap = new Map<Id,List<String>>();//update      wangweipeng      2022/02/21           start
        Map<Id,List<String>> bianmaMap1 = new Map<Id,List<String>>();//update      wangweipeng      2022/02/21           start
        //add by rentx 2021-10-22 end 设置小码 设置管理编码
        Map<Id,List<String>> hzMap = new Map<Id,List<String>>();
        Map<Id,List<String>> hzMap1 = new Map<Id,List<String>>();
        for (WrapperInfo wi : viewList) {
            if (!wi.check) continue;
            Consum_Apply_Equipment_Set_Detail__c caesd = (Consum_Apply_Equipment_Set_Detail__c)wi.sobj;
            Integer cnt = caesd.Inspection_Cnt_Jia__c == null ? 0 : Integer.valueOf(caesd.Inspection_Cnt_Jia__c);
            //update      wangweipeng      2022/01/12           start
            Integer cnt = 0;
            if(String.isNotBlank(caesd.EquipmentManagementCode__c)){
                cnt = caesd.EquipmentManagementCode__c.split(',').size();
            }
            caesd.Inspection_Cnt_Jia__c = cnt;
            //Integer cnt = caesd.Inspection_Cnt_Jia__c == null ? 0 : Integer.valueOf(caesd.Inspection_Cnt_Jia__c);
            //update      wangweipeng      2022/01/12           end
            sendAssetKey.put(caesd.Asset__c, cnt);
            //add by rentx 2021-10-22 start 设置小码
            system.debug(caesd.Inspection_Cnt_Jia__c+'==123='+ caesd.EquipmentManagementCode__c);
            if (!xiaomaMap.containsKey(caesd.Asset__c) && caesd.EquipmentManagementCode__c != null) {
                xiaomaMap.put(caesd.Asset__c, caesd.EquipmentManagementCode__c.split(','));
            }
            if (!bianmaMap.containsKey(caesd.Asset__c) && caesd.ManagementCode__c != null) {
                bianmaMap.put(caesd.Asset__c, caesd.ManagementCode__c.split(','));
            }
            if (!xiaomaMap1.containsKey(caesd.Asset__c) && caesd.EquipmentManagementCode__c != null) {
                xiaomaMap1.put(caesd.Asset__c, caesd.EquipmentManagementCode__c.split(','));
            }
            if (!bianmaMap1.containsKey(caesd.Asset__c) && caesd.ManagementCode__c != null) {
                bianmaMap1.put(caesd.Asset__c, caesd.ManagementCode__c.split(','));
            }
            system.debug('==='+ xiaomaMap+'==bianmaMap=='+bianmaMap);
            //add by rentx 2021-10-22 end 设置小码
            if (!hzMap.containsKey(caesd.Asset__c) && caesd.boxbarcodeforReceipt__c != null) {
                hzMap.put(caesd.Asset__c, caesd.boxbarcodeforReceipt__c.split(','));
            }
            if (!hzMap1.containsKey(caesd.Asset__c) && caesd.boxbarcodeforReceipt__c != null) {
                hzMap1.put(caesd.Asset__c, caesd.boxbarcodeforReceipt__c.split(','));
            }
            system.debug('=zheli3=='+ hzMap+'==hezi=='+caesd.boxbarcodeforReceipt__c);
        }
        List<Consum_Apply_Equipment_Set_Detail__c> updList = new List<Consum_Apply_Equipment_Set_Detail__c>();
       system.debug('useCaesdList=='+useCaesdList.size());
       Map<Id, List<Consum_Apply_Equipment_Set_Detail__c>> caesdMap = new Map<Id, List<Consum_Apply_Equipment_Set_Detail__c>>();
        for (Consum_Apply_Equipment_Set_Detail__c caesd : useCaesdList) {
            if (sendAssetKey.containsKey(caesd.Asset__c)) {
                Integer cnt = sendAssetKey.get(caesd.Asset__c);
@@ -235,9 +289,62 @@
                    caesd.Shipment_Saved_Flg__c = false;
                }
                sendAssetKey.put(caesd.Asset__c, cnt);
                //add by youc 2021-12-06 保存之后,再次设置小码 显示页面 start
                if (caesdMap.containsKey(caesd.Asset__c) == false) {
                    caesdMap.put(caesd.Asset__c, new List<Consum_Apply_Equipment_Set_Detail__c>());
                }
                caesdMap.get(caesd.Asset__c).add(caesd);
                //add by youc 2021-12-06 保存之后,再次设置小码 显示页面 end
                //add by rentx 2021-10-25 start  设置小码
                //将之前的所有"备品管理码" 制为空 再赋值 将用过的元素设置为null字符串 已保证唯一性
                caesd.EquipmentManagementCode__c = '';
                caesd.ManagementCode__c = '';
                caesd.boxbarcodeforReceipt__c = '';
                if (xiaomaMap.containsKey(caesd.Asset__c)) {
                    //获取该保有设备对应的小码集合
                    List<String> tempArr = xiaomaMap.get(caesd.Asset__c);
                    List<String> heArr = bianmaMap.get(caesd.Asset__c);
                    List<String> hzArr = hzMap.get(caesd.Asset__c);
                    System.debug('-------------11111-'+heArr+'==hzArr=='+hzArr);
                    system.debug('tempArr0'+tempArr);
                    if (tempArr != null && tempArr.size() > 0) {
                        for (Integer i = 0; i < tempArr.size(); i++) {
                            if (tempArr[i] != 'null') {
                                caesd.EquipmentManagementCode__c = tempArr[i];
                                system.debug('zheli0'+caesd.EquipmentManagementCode__c);
                                //update      wangweipeng      2022/02/21           start
                                caesd.ManagementCode__c = heArr[i];
                                caesd.boxbarcodeforReceipt__c = hzArr[i];
                                //caesd.ManagementCode__c = bianmaMap.containsKey(caesd.Asset__c) ? bianmaMap.get(caesd.Asset__c) : '';
                                //update      wangweipeng      2022/02/21           end
                                tempArr[i] = 'null';
                                heArr[i] = 'null';
                                hzArr[i] = 'null';
                                break;
                             }
                        }
                    }
                }
                //if(String.isNotBlank(caesd.ManagementCode__c)){
                //    caesd.boxbarcodeforReceipt__c = caesd.Barcode_F__c + '250' + caesd.ManagementCode__c;
                //}else{
                //    caesd.boxbarcodeforReceipt__c = '';
                //}
                //设置"管理编码"
                /**
                if(!bianmaMap.containsKey(caesd.Asset__c)){
                  caesd.ManagementCode__c = bianmaMap.containsKey(caesd.Asset__c) ? bianmaMap.get(caesd.Asset__c) : '';
                  system.debug(bianmaMap+'管理编码'+caesd.ManagementCode__c+'备品管理码'+caesd.EquipmentManagementCode__c);
                }
                **/
                //add by rentx 2021-10-25 end 设置小码
                updList.add(caesd);
            }
        }
        Savepoint sp = Database.setSavepoint();
        try {
@@ -248,7 +355,26 @@
            if (updList.size() > 0) {
                update updList;    
            }
            //add by youc 2021-12-06 保存之后,再次设置小码 显示页面 start
            for (Id assId : caesdMap.keySet()) {
                Consum_Apply_Equipment_Set_Detail__c wiInfo = caesdMap.get(assId)[0];
                if (xiaomaMap1.containsKey(wiInfo.Asset__c)) {
                   wiInfo.EquipmentManagementCode__c = String.join(xiaomaMap1.get(wiInfo.Asset__c), ',');
                }
                if (bianmaMap1.containsKey(wiInfo.Asset__c)) {
                   wiInfo.ManagementCode__c = String.join(bianmaMap1.get(wiInfo.Asset__c), ',');
                }
                if (hzMap1.containsKey(wiInfo.Asset__c)) {
                   wiInfo.boxbarcodeforReceipt__c = String.join(hzMap1.get(wiInfo.Asset__c), ',');
                }
            }
            //add by youc 2021-12-06 保存之后,再次设置小码 显示页面 end
            done_flg = true;
            //add by youc 2021-12-06 再次调用了下初始化方法,给输入框赋值
            // myComponentController.getSelectedDataInfo();
            // getSqlWhereStr();
            // myComponentController.searchAndPaging();
            //add by youc 2021-12-06
        } catch (Exception ex) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage()));
            Database.rollback(sp);
@@ -265,6 +391,27 @@
            if (!wi.check) {
                continue;
            }
          /**  暂时不需要提示,直接发货,保存大小码
            //add       wangweipeng              2022/01/28                   start
            //判断页面是否保存
            if(useCaesdList != null && useCaesdList.size() > 0){
                for(Consum_Apply_Equipment_Set_Detail__c caesdc : useCaesdList){
                    if(caesd.Asset__c == caesdc.Asset__c){
                        if(caesdc.Shipment_Saved_Flg__c == false){
                           ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请先保存数据,在进行发货'));
                            return;
                        }
                    }
                }
            }
            //add       wangweipeng              2022/01/28                   end
            **/
            //贸易合规 you
            if(System.Label.TradeComplianceStatusFlagBP =='true' && caesd.Consum_Apply__r.AccDealerBlacklist__c == '1'){
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, System.Label.IFTradeComplianceAlertBP));
                return ;
            }
            String guaranteen_end = '';
            if (caesd.Consumable_Guaranteen_end_F__c != null) {
                guaranteen_end = caesd.Consumable_Guaranteen_end_F__c.format();                     
@@ -273,6 +420,12 @@
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品已过期['+caesd.Fixture_Model_No_F__c+']('+caesd.Consumable_Guaranteen_end_F__c.format()+')'));
                return;
            }
            Integer cnt = 0;
            if(String.isNotBlank(caesd.EquipmentManagementCode__c)){
                cnt = caesd.EquipmentManagementCode__c.split(',').size();
            }
            caesd.Inspection_Cnt_Jia__c = cnt;
            system.debug('发货件数==='+caesd.Inspection_Cnt_Jia__c);
            if (caesd.Inspection_Cnt_Jia__c > caesd.Yi_Chu_Ku_Zhi_Shi_Jia__c) {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '发货件数大于已出库指示件数['+caesd.Fixture_Model_No_F__c+']('+guaranteen_end+')'));
                return;
@@ -281,7 +434,18 @@
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '发货件数小于已出库指示件数['+caesd.Fixture_Model_No_F__c+']('+guaranteen_end+')'));
                return;
            }
            //add by youc 2021-12-27 start
            if (caesd.EquipmentManagementCode__c == null) {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '备品管理码为空,不能发货'));
                return;
            }
            if (caesd.ManagementCode__c == null) {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '管理编码为空,不能发货'));
                return;
            }
            //add by youc 2021-12-27 end
            if (slip.Name == null || slip.DeliveryType__c == null || slip.Distributor_method__c == null || slip.DeliveryCompany__c == null || slip.Wh_Staff__c == null ) {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请填写发货信息'));
                return;
@@ -307,7 +471,7 @@
                assetIdSet.add(caesd.Asset__c);
            }
        }
        if (viewList.size() > 0 && (sendEquipmentSet.size() != ((Consum_Apply_Equipment_Set_Detail__c)viewList[0].sobj).Consum_Apply__r.Shipment_requested_cnt__c || hadCnt != needCnt)) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '必须整单发货,部分发货请进行分单'));
            return;
@@ -324,6 +488,10 @@
            done_flg = false;
            return;
        }
        //add       wangweipeng                  2022/02/17               start
        save();
        //add       wangweipeng                  2022/02/17               end
        
        Savepoint sp = Database.setSavepoint();
@@ -351,6 +519,8 @@
                            Inspection_Cnt_Jia__c = upd.Inspection_Cnt_Jia__c,
                            DeliverySlip__c = slip.Id,
                            Shippment_loaner_time__c = nowtime,
                            //EquipmentManagementCode__c = upd.EquipmentManagementCode__c,
                            //ManagementCode__c = upd.ManagementCode__c,
                            StockDown__c = true
                            //, StockDown_time__c = nowtime 
                            ));
@@ -376,6 +546,9 @@
            Consum_Apply_Equipment_Set_Detail__c caesd = (Consum_Apply_Equipment_Set_Detail__c)wi.sobj;
            if (caesd.DeliverySlip__c == null) {
                caesd.Inspection_Cnt_Jia__c = null;
                caesd.EquipmentManagementCode__c = null; //add by youc 2022-02-27
                caesd.ManagementCode__c = null;//add by youc 2022-02-27
                caesd.boxbarcodeforReceipt__c = null;
                clearAssetId.add(caesd.Asset__c);
            }
        }
@@ -383,6 +556,9 @@
        for (Consum_Apply_Equipment_Set_Detail__c caesd : useCaesdList) {
            if (clearAssetId.contains(caesd.Asset__c)) {
                caesd.Shipment_Saved_Flg__c = false;
                caesd.EquipmentManagementCode__c = null; //add by youc 2022-02-27
                caesd.ManagementCode__c = null;//add by youc 2022-02-27
                caesd.boxbarcodeforReceipt__c = null;
                updList.add(caesd);
            }
        }
@@ -437,6 +613,15 @@
            useCaesdList = (List<Consum_Apply_Equipment_Set_Detail__c>)selectedData;
        }
        Map<Id, List<Consum_Apply_Equipment_Set_Detail__c>> caesdMap = new Map<Id, List<Consum_Apply_Equipment_Set_Detail__c>>();
        //add by rentx 2021-10-22 start 添加记录(小码记录)
        Map<Id,List<String>> recordforxiaoMaMap = new Map<Id,List<String>>();
        //add by rentx 2021-10-22 end 添加记录(小码记录)
        //add by wangweipeng 2022-02-21 start 添加盒
        Map<Id,List<String>> recordforHeMap = new Map<Id,List<String>>();
        //add by wangweipeng 2022-02-21 end 添加盒
        Map<Id,List<String>> recordforBoxMap = new Map<Id,List<String>>();
        Map<Id, Integer> cntMap = new Map<Id, Integer>();
        Map<Id, Integer> cntShipmentReqMap = new Map<Id, Integer>();
        Map<Id, Boolean> hasShipment = new Map<Id, Boolean>();
@@ -446,6 +631,34 @@
            }
            caesdMap.get(caesd.Asset__c).add(caesd);
            //add by rentx 2021-10-22 start 添加记录(小码记录)
            //有小码的添加到记录里
            if (caesd.EquipmentManagementCode__c != null && caesd.EquipmentManagementCode__c != '') {
                if (recordforxiaoMaMap.containsKey(caesd.Asset__c) == false) {
                    recordforxiaoMaMap.put(caesd.Asset__c, new List<String>());
                }
                recordforxiaoMaMap.get(caesd.Asset__c).add(caesd.EquipmentManagementCode__c);
            }
            system.debug('recordforxiaoMaMap==='+recordforxiaoMaMap);
            //add by rentx 2021-10-22 end 添加记录(小码记录)
            //add by wangweipeng 2022-02-21 start 添加盒
            if (caesd.ManagementCode__c != null && caesd.ManagementCode__c != '') {
                if (recordforHeMap.containsKey(caesd.Asset__c) == false) {
                    recordforHeMap.put(caesd.Asset__c, new List<String>());
                }
                recordforHeMap.get(caesd.Asset__c).add(caesd.ManagementCode__c);
            }
            //add by wangweipeng 2022-02-21 end 添加盒
            if (caesd.boxbarcodeforReceipt__c != null && caesd.boxbarcodeforReceipt__c != '') {
                if (recordforBoxMap.containsKey(caesd.Asset__c) == false) {
                    recordforBoxMap.put(caesd.Asset__c, new List<String>());
                }
                recordforBoxMap.get(caesd.Asset__c).add(caesd.boxbarcodeforReceipt__c);
            }
            system.debug('zheli1'+caesd.boxbarcodeforReceipt__c + 'recordforBoxMap==='+recordforBoxMap);
            if (caesd.Shipment_Saved_Flg__c == true) {
                Integer cnt = cntMap.containsKey(caesd.Asset__c) ? (cntMap.get(caesd.Asset__c) + 1) : 1;
                cntMap.put(caesd.Asset__c, cnt);
@@ -460,12 +673,36 @@
        }
        for (Id assId : caesdMap.keySet()) {
            Consum_Apply_Equipment_Set_Detail__c wiInfo = caesdMap.get(assId)[0];
            //展示的时候需要先设置发货件数为空 add by youc 2021-12-01
            if (cntMap.containsKey(wiInfo.Asset__c)) {
                wiInfo.Inspection_Cnt_Jia__c = cntMap.get(wiInfo.Asset__c);
            }
            if (cntShipmentReqMap.containsKey(wiInfo.Asset__c)) {
                wiInfo.Yi_Chu_Ku_Zhi_Shi_Jia__c = cntShipmentReqMap.get(wiInfo.Asset__c);
            }
            //add by rentx 2021-10-22 start 添加小码
            if (recordforxiaoMaMap.containsKey(wiInfo.Asset__c)) {
                //设置小码
                wiInfo.EquipmentManagementCode__c = String.join(recordforxiaoMaMap.get(wiInfo.Asset__c), ',');
            }
            //展示的时候需要先设置管理编码为空
            //wiInfo.ManagementCode__c = '';//先注释
            //add by rentx 2021-10-22 end 设置小码
            //add by wangweipeng 2022-02-21 start 添加盒
            if (recordforHeMap.containsKey(wiInfo.Asset__c)) {
                //设置小码
                wiInfo.ManagementCode__c = String.join(recordforHeMap.get(wiInfo.Asset__c), ',');
            }
            //add by wangweipeng 2022-02-21 end 添加盒
            if (recordforBoxMap.containsKey(wiInfo.Asset__c)) {
                //设置小码
                wiInfo.boxbarcodeforReceipt__c = String.join(recordforBoxMap.get(wiInfo.Asset__c), ',');
            }
            system.debug('zheli2'+wiInfo.boxbarcodeforReceipt__c);
            WrapperInfo wi = new WrapperInfo(wiInfo, myComponentController);
            wi.additionalInfoMap.put('Product_Serial_No_F__c', wiInfo.Product_Serial_No_F__c);
@@ -484,4 +721,1345 @@
        
    }
      @TestVisible private static void test() {
        if (false == Test.isRunningTest()) return;
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
}