jell-utils 0.0.18 โ†’ 0.1.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.
@@ -0,0 +1,153 @@
1
+ # ๐Ÿงช CI/CD Pipeline Test Results
2
+
3
+ ## ๐Ÿ“Š Test Summary
4
+
5
+ **์ „์ฒด ํ…Œ์ŠคํŠธ ์™„๋ฃŒ**: 2024-01-XX
6
+ **ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ**: ๋กœ์ปฌ + GitHub Actions ์‹œ๋ฎฌ๋ ˆ์ด์…˜
7
+ **์•ˆ์ „์„ฑ**: โœ… ์‹ค์ œ ๋ฐฐํฌ ๋ฐฉ์ง€๋จ (NPM_TOKEN ๋ฏธ์„ค์ •)
8
+
9
+ ---
10
+
11
+ ## โœ… ์„ฑ๊ณตํ•œ ํ…Œ์ŠคํŠธ๋“ค
12
+
13
+ ### 1. **Semantic Release ์„ค์ •** โœ…
14
+ - **์ƒํƒœ**: ์™„์ „ ์ž‘๋™
15
+ - **๊ฒ€์ฆ ๊ฒฐ๊ณผ**:
16
+ - ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋“œ๋จ
17
+ - Conventional commit ์ธ์‹๋จ
18
+ - BREAKING CHANGE โ†’ Major ๋ฒ„์ „ ์ฆ๊ฐ€ ์˜ˆ์ • (0.0.18 โ†’ 1.0.0)
19
+ - ๋ธŒ๋žœ์น˜ ํ•„ํ„ฐ๋ง ์ •์ƒ ์ž‘๋™ (reboot ๋ธŒ๋žœ์น˜์—์„œ ๋ฐฐํฌ ์ฐจ๋‹จ๋จ)
20
+
21
+ ### 2. **Git Hooks (Husky)** โœ…
22
+ - **์ƒํƒœ**: ์™„์ „ ์ž‘๋™
23
+ - **๊ฒ€์ฆ ๊ฒฐ๊ณผ**:
24
+ - Pre-commit: ๋ฆฐํŠธ ๋ฐ ํฌ๋งทํŒ… ์ž๋™ ์‹คํ–‰ โœ…
25
+ - Commit-msg: Conventional commits ๊ฒ€์ฆ โœ…
26
+ - Lint-staged: ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ์ฒ˜๋ฆฌ โœ…
27
+
28
+ ### 3. **Build & Test Pipeline** โœ…
29
+ - **์ƒํƒœ**: ์™„์ „ ์ž‘๋™
30
+ - **๊ฒ€์ฆ ๊ฒฐ๊ณผ**:
31
+ - TypeScript ๋นŒ๋“œ ์„ฑ๊ณต โœ…
32
+ - Jest ํ…Œ์ŠคํŠธ ํ†ต๊ณผ โœ… (5/5 tests)
33
+ - ESLint ํ†ต๊ณผ โœ…
34
+ - ์˜์กด์„ฑ ์„ค์น˜ ์„ฑ๊ณต โœ…
35
+
36
+ ### 4. **GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ** โœ…
37
+ - **์ƒํƒœ**: ๋ฌธ๋ฒ• ๊ฒ€์ฆ ์™„๋ฃŒ
38
+ - **ํŒŒ์ผ ๊ตฌ์กฐ**:
39
+ - `ci.yml`: Multi-Node.js, Cross-platform ํ…Œ์ŠคํŠธ
40
+ - `release.yml`: Semantic release + NPM ๋ฐฐํฌ
41
+ - ์›Œํฌํ”Œ๋กœ์šฐ ์—ฐ๊ฒฐ: CI ์„ฑ๊ณต โ†’ Release ์‹คํ–‰
42
+
43
+ ### 5. **Conventional Commits** โœ…
44
+ - **ํ…Œ์ŠคํŠธ ์ปค๋ฐ‹**: `feat: implement modern CI/CD pipeline`
45
+ - **BREAKING CHANGE**: ํฌํ•จ๋จ
46
+ - **์˜ˆ์ƒ ๋ฒ„์ „**: 0.0.18 โ†’ 1.0.0
47
+
48
+ ### 6. **์•ˆ์ „์„ฑ ๊ฒ€์ฆ** โœ…
49
+ - NPM_TOKEN ๋ฏธ์„ค์ •์œผ๋กœ ์‹ค์ œ ๋ฐฐํฌ ์ฐจ๋‹จ ํ™•์ธ
50
+ - ๋ธŒ๋žœ์น˜ ํ•„ํ„ฐ๋ง์œผ๋กœ ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐฐํฌ ์ฐจ๋‹จ ํ™•์ธ
51
+
52
+ ---
53
+
54
+ ## โš ๏ธ ํ…Œ์ŠคํŠธ ์ œํ•œ์‚ฌํ•ญ
55
+
56
+ ### 1. **GitHub Push ๊ถŒํ•œ**
57
+ - **์ƒํƒœ**: ๊ถŒํ•œ ์—†์Œ (์˜ˆ์ƒ๋จ)
58
+ - **์›์ธ**: `hgyoo-azflow` โ†’ `jellive/jell-utils.js` ๊ถŒํ•œ ์—†์Œ
59
+ - **ํ•ด๊ฒฐ**: ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž๊ฐ€ ์ง์ ‘ push ํ•„์š”
60
+
61
+ ### 2. **์‹ค์ œ NPM ๋ฐฐํฌ**
62
+ - **์ƒํƒœ**: ํ…Œ์ŠคํŠธ ์•ˆํ•จ (์˜๋„์ )
63
+ - **์›์ธ**: NPM_TOKEN ๋ฏธ์„ค์ •
64
+ - **ํ•ด๊ฒฐ**: Repository secrets์— NPM_TOKEN ์„ค์ • ํ›„ ํ…Œ์ŠคํŠธ
65
+
66
+ ---
67
+
68
+ ## ๐Ÿš€ ์‹ค์ œ ์šด์˜์„ ์œ„ํ•œ ๋‹ค์Œ ๋‹จ๊ณ„
69
+
70
+ ### **Step 1: Repository Secrets ์„ค์ •**
71
+ GitHub Repository โ†’ Settings โ†’ Secrets and variables โ†’ Actions:
72
+
73
+ ```bash
74
+ # NPM ๋ฐฐํฌ ํ† ํฐ (ํ•„์ˆ˜)
75
+ NPM_TOKEN=npm_xxxxxxxxxxxxxxxx
76
+
77
+ # ์„ ํƒ์‚ฌํ•ญ
78
+ SLACK_WEBHOOK_URL=https://hooks.slack.com/...
79
+ CODECOV_TOKEN=xxxxxxxx-xxxx-xxxx...
80
+ ```
81
+
82
+ ### **Step 2: Branch Protection Rules**
83
+ Repository โ†’ Settings โ†’ Branches โ†’ Add rule:
84
+ - Branch name pattern: `main`
85
+ - โœ… Require pull request before merging
86
+ - โœ… Require status checks to pass
87
+
88
+ ### **Step 3: ์‹ค์ œ ๋ฐฐํฌ ํ…Œ์ŠคํŠธ**
89
+ ```bash
90
+ # 1. ์ž‘์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹
91
+ git checkout -b test/ci-cd-validation
92
+ echo "# CI/CD Test" > TEST.md
93
+ git add TEST.md
94
+ git commit -m "docs: add CI/CD validation test"
95
+
96
+ # 2. PR ์ƒ์„ฑ ๋ฐ merge
97
+ git push origin test/ci-cd-validation
98
+ # GitHub์—์„œ PR ์ƒ์„ฑ โ†’ CI ์‹คํ–‰ ํ™•์ธ โ†’ Merge
99
+
100
+ # 3. ์ž๋™ ๋ฐฐํฌ ํ™•์ธ
101
+ # GitHub Actions์—์„œ release ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰
102
+ # NPM์— ์ƒˆ ๋ฒ„์ „ ์ž๋™ ๋ฐฐํฌ
103
+ # GitHub Release ์ž๋™ ์ƒ์„ฑ
104
+ ```
105
+
106
+ ---
107
+
108
+ ## ๐ŸŽฏ ์˜ˆ์ƒ ๊ฒฐ๊ณผ
109
+
110
+ ### **์‹ค์ œ ๋ฐฐํฌ์‹œ workflow:**
111
+ 1. **CI Pipeline**: โœ… ๋‹ค์ค‘ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ (Ubuntu/Windows/macOS, Node 18/20/21)
112
+ 2. **Security Scan**: โœ… ์˜์กด์„ฑ ์ทจ์•ฝ์  ๊ฒ€์‚ฌ
113
+ 3. **Semantic Analysis**: โœ… ์ปค๋ฐ‹ ๋ถ„์„ โ†’ ๋ฒ„์ „ ๊ณ„์‚ฐ (1.0.0)
114
+ 4. **Automated Release**: โœ… GitHub Release + Changelog ์ƒ์„ฑ
115
+ 5. **NPM Publish**: โœ… npm registry ๋ฐฐํฌ
116
+ 6. **Notifications**: โœ… Slack ์•Œ๋ฆผ (์„ค์ •์‹œ)
117
+
118
+ ### **๋ฒ„์ „ ๊ด€๋ฆฌ:**
119
+ - **Current**: 0.0.18
120
+ - **Next Release**: 1.0.0 (BREAKING CHANGE ๊ฐ์ง€)
121
+ - **Changelog**: ์ž๋™ ์ƒ์„ฑ
122
+ - **Git Tags**: ์ž๋™ ์ƒ์„ฑ
123
+
124
+ ---
125
+
126
+ ## ๐Ÿ“‹ Test Checklist
127
+
128
+ - [x] Semantic Release ์„ค์ • ๋ฐ ๊ฒ€์ฆ
129
+ - [x] Conventional Commits ํ˜•์‹ ๊ฒ€์ฆ
130
+ - [x] Git Hooks ์ž‘๋™ ํ™•์ธ
131
+ - [x] Build Pipeline ๊ฒ€์ฆ
132
+ - [x] GitHub Actions YAML ๋ฌธ๋ฒ• ํ™•์ธ
133
+ - [x] ์•ˆ์ „์„ฑ ๊ฒ€์ฆ (์‹ค์ œ ๋ฐฐํฌ ์ฐจ๋‹จ)
134
+ - [ ] ์‹ค์ œ GitHub Push (๊ถŒํ•œ ํ•„์š”)
135
+ - [ ] NPM Token ์„ค์ • ํ›„ ๋ฐฐํฌ ํ…Œ์ŠคํŠธ
136
+ - [ ] Slack ์•Œ๋ฆผ ํ…Œ์ŠคํŠธ
137
+
138
+ ---
139
+
140
+ ## ๐ŸŽ‰ ๊ฒฐ๋ก 
141
+
142
+ **โœ… CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด ์™„์ „ํžˆ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค!**
143
+
144
+ ๋ชจ๋“  ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์ด ๋กœ์ปฌ์—์„œ ๊ฒ€์ฆ๋˜์—ˆ์œผ๋ฉฐ, ์‹ค์ œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ๋Š”:
145
+ 1. GitHub Repository ์ ‘๊ทผ ๊ถŒํ•œ ํ™•๋ณด
146
+ 2. NPM_TOKEN ์„ค์ •
147
+ 3. Branch protection rules ์ ์šฉ
148
+
149
+ ์ดํ›„ ๋‹จ์ˆœํžˆ `main` ๋ธŒ๋žœ์น˜์— conventional commit์œผ๋กœ mergeํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด **์™„์ „ ์ž๋™ํ™”๋œ ๋ฒ„์ „ ๊ด€๋ฆฌ + NPM ๋ฐฐํฌ**๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
150
+
151
+ ---
152
+
153
+ *ํ…Œ์ŠคํŠธ ์™„๋ฃŒ ์‹œ์ : $(date)*
@@ -0,0 +1,27 @@
1
+ # ๐Ÿงช CI/CD Pipeline Test Simulation
2
+
3
+ ## Test Environment
4
+
5
+ - Branch: reboot (safe for testing)
6
+ - Date: $(date)
7
+ - Purpose: Validate CI/CD pipeline without actual deployment
8
+
9
+ ## Test Results
10
+
11
+ ### โœ… Configuration Validation
12
+
13
+ - Semantic Release: LOADED
14
+ - All Plugins: CONFIGURED
15
+ - Dependencies: INSTALLED
16
+
17
+ ### ๐Ÿ”„ Next Steps
18
+
19
+ 1. Create test commit with conventional format
20
+ 2. Run semantic-release dry-run
21
+ 3. Validate version calculation
22
+ 4. Test GitHub Actions workflow syntax
23
+
24
+ ---
25
+
26
+ _This is a test file for CI/CD pipeline validation_
27
+ Test change
@@ -0,0 +1,300 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <coverage generated="1760097376381" clover="3.2.0">
3
+ <project timestamp="1760097376381" name="All files">
4
+ <metrics statements="291" coveredstatements="241" conditionals="263" coveredconditionals="193" methods="63" coveredmethods="56" elements="617" coveredelements="490" complexity="0" loc="291" ncloc="291" packages="1" files="1" classes="1"/>
5
+ <file name="index.js" path="/Users/jellpd/jell-utils.js/lib/index.js">
6
+ <metrics statements="291" coveredstatements="241" conditionals="263" coveredconditionals="193" methods="63" coveredmethods="56"/>
7
+ <line num="2" count="7" type="cond" truecount="3" falsecount="0"/>
8
+ <line num="3" count="1" type="cond" truecount="1" falsecount="1"/>
9
+ <line num="4" count="0" type="stmt"/>
10
+ <line num="5" count="0" type="stmt"/>
11
+ <line num="6" count="0" type="cond" truecount="0" falsecount="2"/>
12
+ <line num="7" count="0" type="stmt"/>
13
+ <line num="9" count="0" type="stmt"/>
14
+ <line num="11" count="1" type="stmt"/>
15
+ <line num="13" count="7" type="cond" truecount="3" falsecount="0"/>
16
+ <line num="14" count="9" type="cond" truecount="1" falsecount="1"/>
17
+ <line num="15" count="3" type="cond" truecount="2" falsecount="0"/>
18
+ <line num="16" count="5" type="stmt"/>
19
+ <line num="17" count="4" type="stmt"/>
20
+ <line num="18" count="11" type="cond" truecount="2" falsecount="0"/>
21
+ <line num="19" count="3" type="cond" truecount="1" falsecount="1"/>
22
+ <line num="22" count="7" type="cond" truecount="3" falsecount="0"/>
23
+ <line num="23" count="19" type="cond" truecount="3" falsecount="1"/>
24
+ <line num="24" count="9" type="cond" truecount="2" falsecount="0"/>
25
+ <line num="25" count="27" type="stmt"/>
26
+ <line num="27" count="27" type="cond" truecount="1" falsecount="1"/>
27
+ <line num="28" count="77" type="cond" truecount="3" falsecount="1"/>
28
+ <line num="29" count="77" type="cond" truecount="9" falsecount="4"/>
29
+ <line num="30" count="68" type="cond" truecount="2" falsecount="0"/>
30
+ <line num="31" count="68" type="cond" truecount="5" falsecount="1"/>
31
+ <line num="32" count="24" type="stmt"/>
32
+ <line num="33" count="9" type="stmt"/>
33
+ <line num="34" count="6" type="stmt"/>
34
+ <line num="35" count="0" type="stmt"/>
35
+ <line num="37" count="29" type="cond" truecount="7" falsecount="0"/>
36
+ <line num="38" count="20" type="cond" truecount="6" falsecount="0"/>
37
+ <line num="39" count="10" type="cond" truecount="4" falsecount="0"/>
38
+ <line num="40" count="6" type="cond" truecount="3" falsecount="1"/>
39
+ <line num="41" count="6" type="cond" truecount="1" falsecount="1"/>
40
+ <line num="42" count="6" type="stmt"/>
41
+ <line num="44" count="38" type="stmt"/>
42
+ <line num="45" count="77" type="stmt"/>
43
+ <line num="46" count="9" type="cond" truecount="3" falsecount="1"/>
44
+ <line num="49" count="7" type="cond" truecount="3" falsecount="0"/>
45
+ <line num="50" count="5" type="cond" truecount="2" falsecount="2"/>
46
+ <line num="51" count="10" type="cond" truecount="3" falsecount="1"/>
47
+ <line num="52" count="0" type="cond" truecount="0" falsecount="2"/>
48
+ <line num="53" count="0" type="stmt"/>
49
+ <line num="56" count="5" type="cond" truecount="2" falsecount="0"/>
50
+ <line num="58" count="7" type="stmt"/>
51
+ <line num="59" count="7" type="stmt"/>
52
+ <line num="66" count="5" type="stmt"/>
53
+ <line num="67" count="5" type="stmt"/>
54
+ <line num="75" count="5" type="cond" truecount="4" falsecount="0"/>
55
+ <line num="76" count="3" type="stmt"/>
56
+ <line num="79" count="2" type="cond" truecount="1" falsecount="1"/>
57
+ <line num="80" count="2" type="stmt"/>
58
+ <line num="83" count="0" type="stmt"/>
59
+ <line num="84" count="0" type="stmt"/>
60
+ <line num="88" count="0" type="cond" truecount="0" falsecount="2"/>
61
+ <line num="89" count="0" type="stmt"/>
62
+ <line num="90" count="0" type="cond" truecount="0" falsecount="4"/>
63
+ <line num="93" count="0" type="stmt"/>
64
+ <line num="94" count="0" type="stmt"/>
65
+ <line num="95" count="0" type="cond" truecount="0" falsecount="2"/>
66
+ <line num="96" count="0" type="stmt"/>
67
+ <line num="97" count="0" type="stmt"/>
68
+ <line num="103" count="0" type="stmt"/>
69
+ <line num="112" count="2" type="stmt"/>
70
+ <line num="122" count="6" type="cond" truecount="2" falsecount="0"/>
71
+ <line num="123" count="6" type="cond" truecount="5" falsecount="0"/>
72
+ <line num="124" count="1" type="stmt"/>
73
+ <line num="126" count="5" type="cond" truecount="2" falsecount="0"/>
74
+ <line num="127" count="5" type="cond" truecount="2" falsecount="0"/>
75
+ <line num="136" count="6" type="cond" truecount="5" falsecount="0"/>
76
+ <line num="137" count="1" type="stmt"/>
77
+ <line num="139" count="5" type="cond" truecount="2" falsecount="0"/>
78
+ <line num="140" count="1" type="stmt"/>
79
+ <line num="141" count="1" type="cond" truecount="1" falsecount="1"/>
80
+ <line num="143" count="4" type="stmt"/>
81
+ <line num="144" count="10" type="stmt"/>
82
+ <line num="145" count="10" type="cond" truecount="1" falsecount="1"/>
83
+ <line num="147" count="4" type="cond" truecount="3" falsecount="1"/>
84
+ <line num="148" count="0" type="stmt"/>
85
+ <line num="150" count="4" type="cond" truecount="2" falsecount="0"/>
86
+ <line num="151" count="4" type="cond" truecount="2" falsecount="0"/>
87
+ <line num="153" count="2" type="stmt"/>
88
+ <line num="157" count="2" type="stmt"/>
89
+ <line num="165" count="1" type="stmt"/>
90
+ <line num="166" count="1" type="stmt"/>
91
+ <line num="167" count="1" type="stmt"/>
92
+ <line num="168" count="1" type="stmt"/>
93
+ <line num="177" count="2" type="cond" truecount="1" falsecount="1"/>
94
+ <line num="178" count="2" type="cond" truecount="1" falsecount="1"/>
95
+ <line num="179" count="2" type="stmt"/>
96
+ <line num="180" count="2" type="stmt"/>
97
+ <line num="181" count="2" type="stmt"/>
98
+ <line num="182" count="2" type="stmt"/>
99
+ <line num="183" count="2" type="cond" truecount="2" falsecount="0"/>
100
+ <line num="184" count="1" type="stmt"/>
101
+ <line num="185" count="1" type="stmt"/>
102
+ <line num="193" count="1" type="cond" truecount="1" falsecount="1"/>
103
+ <line num="194" count="1" type="stmt"/>
104
+ <line num="195" count="1" type="stmt"/>
105
+ <line num="196" count="1" type="stmt"/>
106
+ <line num="197" count="1" type="stmt"/>
107
+ <line num="198" count="1" type="cond" truecount="1" falsecount="1"/>
108
+ <line num="199" count="1" type="stmt"/>
109
+ <line num="200" count="1" type="cond" truecount="1" falsecount="1"/>
110
+ <line num="201" count="1" type="stmt"/>
111
+ <line num="202" count="1" type="stmt"/>
112
+ <line num="210" count="1" type="cond" truecount="1" falsecount="1"/>
113
+ <line num="211" count="1" type="stmt"/>
114
+ <line num="212" count="1" type="stmt"/>
115
+ <line num="213" count="1" type="stmt"/>
116
+ <line num="214" count="1" type="stmt"/>
117
+ <line num="215" count="1" type="stmt"/>
118
+ <line num="226" count="1" type="stmt"/>
119
+ <line num="227" count="1" type="stmt"/>
120
+ <line num="235" count="3" type="cond" truecount="1" falsecount="1"/>
121
+ <line num="236" count="3" type="stmt"/>
122
+ <line num="238" count="7" type="cond" truecount="2" falsecount="0"/>
123
+ <line num="239" count="3" type="stmt"/>
124
+ <line num="242" count="4" type="stmt"/>
125
+ <line num="244" count="7" type="stmt"/>
126
+ <line num="245" count="7" type="stmt"/>
127
+ <line num="247" count="3" type="stmt"/>
128
+ <line num="255" count="2" type="cond" truecount="1" falsecount="1"/>
129
+ <line num="256" count="2" type="stmt"/>
130
+ <line num="257" count="2" type="stmt"/>
131
+ <line num="265" count="2" type="cond" truecount="1" falsecount="1"/>
132
+ <line num="266" count="0" type="stmt"/>
133
+ <line num="268" count="2" type="stmt"/>
134
+ <line num="272" count="4" type="stmt"/>
135
+ <line num="273" count="4" type="stmt"/>
136
+ <line num="275" count="2" type="stmt"/>
137
+ <line num="283" count="1" type="stmt"/>
138
+ <line num="291" count="1" type="stmt"/>
139
+ <line num="300" count="0" type="cond" truecount="0" falsecount="2"/>
140
+ <line num="301" count="0" type="cond" truecount="0" falsecount="2"/>
141
+ <line num="302" count="0" type="stmt"/>
142
+ <line num="304" count="0" type="stmt"/>
143
+ <line num="306" count="0" type="stmt"/>
144
+ <line num="307" count="0" type="stmt"/>
145
+ <line num="308" count="0" type="stmt"/>
146
+ <line num="312" count="0" type="stmt"/>
147
+ <line num="314" count="0" type="stmt"/>
148
+ <line num="316" count="0" type="stmt"/>
149
+ <line num="317" count="0" type="stmt"/>
150
+ <line num="318" count="0" type="stmt"/>
151
+ <line num="319" count="0" type="stmt"/>
152
+ <line num="320" count="0" type="stmt"/>
153
+ <line num="322" count="0" type="cond" truecount="0" falsecount="4"/>
154
+ <line num="323" count="0" type="stmt"/>
155
+ <line num="326" count="0" type="stmt"/>
156
+ <line num="327" count="0" type="cond" truecount="0" falsecount="2"/>
157
+ <line num="329" count="0" type="cond" truecount="0" falsecount="2"/>
158
+ <line num="330" count="0" type="stmt"/>
159
+ <line num="331" count="0" type="stmt"/>
160
+ <line num="336" count="0" type="stmt"/>
161
+ <line num="338" count="0" type="stmt"/>
162
+ <line num="347" count="3" type="cond" truecount="1" falsecount="1"/>
163
+ <line num="348" count="0" type="stmt"/>
164
+ <line num="349" count="3" type="cond" truecount="3" falsecount="1"/>
165
+ <line num="350" count="0" type="stmt"/>
166
+ <line num="351" count="3" type="cond" truecount="2" falsecount="0"/>
167
+ <line num="352" count="1" type="stmt"/>
168
+ <line num="353" count="2" type="stmt"/>
169
+ <line num="354" count="6" type="cond" truecount="2" falsecount="0"/>
170
+ <line num="355" count="1" type="stmt"/>
171
+ <line num="357" count="1" type="stmt"/>
172
+ <line num="364" count="0" type="stmt"/>
173
+ <line num="372" count="6" type="stmt"/>
174
+ <line num="373" count="6" type="cond" truecount="2" falsecount="0"/>
175
+ <line num="374" count="3" type="stmt"/>
176
+ <line num="375" count="3" type="stmt"/>
177
+ <line num="376" count="3" type="stmt"/>
178
+ <line num="377" count="3" type="stmt"/>
179
+ <line num="378" count="3" type="stmt"/>
180
+ <line num="379" count="27" type="stmt"/>
181
+ <line num="381" count="3" type="stmt"/>
182
+ <line num="382" count="3" type="stmt"/>
183
+ <line num="383" count="3" type="stmt"/>
184
+ <line num="393" count="2" type="stmt"/>
185
+ <line num="394" count="2" type="stmt"/>
186
+ <line num="395" count="2" type="stmt"/>
187
+ <line num="396" count="6" type="stmt"/>
188
+ <line num="397" count="6" type="cond" truecount="4" falsecount="0"/>
189
+ <line num="398" count="1" type="stmt"/>
190
+ <line num="400" count="5" type="stmt"/>
191
+ <line num="402" count="1" type="cond" truecount="1" falsecount="1"/>
192
+ <line num="411" count="2" type="stmt"/>
193
+ <line num="412" count="2" type="stmt"/>
194
+ <line num="413" count="2" type="cond" truecount="1" falsecount="1"/>
195
+ <line num="414" count="0" type="stmt"/>
196
+ <line num="415" count="2" type="stmt"/>
197
+ <line num="416" count="2" type="stmt"/>
198
+ <line num="417" count="3" type="stmt"/>
199
+ <line num="418" count="3" type="cond" truecount="4" falsecount="0"/>
200
+ <line num="419" count="2" type="stmt"/>
201
+ <line num="421" count="3" type="stmt"/>
202
+ <line num="423" count="2" type="stmt"/>
203
+ <line num="432" count="1" type="stmt"/>
204
+ <line num="433" count="3" type="stmt"/>
205
+ <line num="434" count="3" type="cond" truecount="2" falsecount="0"/>
206
+ <line num="435" count="2" type="stmt"/>
207
+ <line num="437" count="3" type="stmt"/>
208
+ <line num="438" count="3" type="stmt"/>
209
+ <line num="447" count="2" type="stmt"/>
210
+ <line num="455" count="4" type="stmt"/>
211
+ <line num="456" count="4" type="cond" truecount="2" falsecount="0"/>
212
+ <line num="465" count="1" type="cond" truecount="1" falsecount="1"/>
213
+ <line num="466" count="1" type="stmt"/>
214
+ <line num="467" count="1" type="stmt"/>
215
+ <line num="468" count="1" type="stmt"/>
216
+ <line num="469" count="1" type="stmt"/>
217
+ <line num="470" count="1" type="stmt"/>
218
+ <line num="471" count="1" type="stmt"/>
219
+ <line num="472" count="1" type="stmt"/>
220
+ <line num="473" count="1" type="stmt"/>
221
+ <line num="482" count="2" type="stmt"/>
222
+ <line num="483" count="2" type="stmt"/>
223
+ <line num="484" count="4" type="cond" truecount="1" falsecount="1"/>
224
+ <line num="485" count="4" type="stmt"/>
225
+ <line num="486" count="4" type="stmt"/>
226
+ <line num="487" count="4" type="cond" truecount="8" falsecount="0"/>
227
+ <line num="493" count="1" type="stmt"/>
228
+ <line num="496" count="3" type="stmt"/>
229
+ <line num="500" count="2" type="stmt"/>
230
+ <line num="510" count="3" type="stmt"/>
231
+ <line num="511" count="3" type="stmt"/>
232
+ <line num="512" count="4" type="stmt"/>
233
+ <line num="514" count="3" type="stmt"/>
234
+ <line num="516" count="3" type="cond" truecount="2" falsecount="0"/>
235
+ <line num="517" count="3" type="cond" truecount="2" falsecount="0"/>
236
+ <line num="518" count="3" type="stmt"/>
237
+ <line num="519" count="14" type="cond" truecount="5" falsecount="0"/>
238
+ <line num="521" count="3" type="stmt"/>
239
+ <line num="523" count="6" type="stmt"/>
240
+ <line num="524" count="24" type="cond" truecount="6" falsecount="0"/>
241
+ <line num="526" count="6" type="stmt"/>
242
+ <line num="527" count="6" type="stmt"/>
243
+ <line num="528" count="6" type="stmt"/>
244
+ <line num="529" count="6" type="stmt"/>
245
+ <line num="531" count="4" type="stmt"/>
246
+ <line num="532" count="4" type="stmt"/>
247
+ <line num="533" count="4" type="cond" truecount="2" falsecount="0"/>
248
+ <line num="534" count="3" type="stmt"/>
249
+ <line num="535" count="3" type="stmt"/>
250
+ <line num="538" count="3" type="stmt"/>
251
+ <line num="539" count="3" type="stmt"/>
252
+ <line num="540" count="4" type="stmt"/>
253
+ <line num="541" count="4" type="stmt"/>
254
+ <line num="545" count="3" type="stmt"/>
255
+ <line num="546" count="3" type="stmt"/>
256
+ <line num="548" count="7" type="cond" truecount="2" falsecount="0"/>
257
+ <line num="549" count="6" type="stmt"/>
258
+ <line num="551" count="6" type="stmt"/>
259
+ <line num="552" count="6" type="cond" truecount="2" falsecount="0"/>
260
+ <line num="553" count="2" type="stmt"/>
261
+ <line num="554" count="4" type="stmt"/>
262
+ <line num="556" count="4" type="stmt"/>
263
+ <line num="557" count="4" type="stmt"/>
264
+ <line num="558" count="1" type="stmt"/>
265
+ <line num="570" count="5" type="stmt"/>
266
+ <line num="591" count="5" type="stmt"/>
267
+ <line num="592" count="13" type="stmt"/>
268
+ <line num="593" count="13" type="cond" truecount="3" falsecount="1"/>
269
+ <line num="594" count="13" type="stmt"/>
270
+ <line num="595" count="13" type="stmt"/>
271
+ <line num="597" count="0" type="stmt"/>
272
+ <line num="599" count="5" type="stmt"/>
273
+ <line num="600" count="5" type="stmt"/>
274
+ <line num="610" count="2" type="cond" truecount="1" falsecount="1"/>
275
+ <line num="611" count="2" type="stmt"/>
276
+ <line num="612" count="7" type="stmt"/>
277
+ <line num="613" count="7" type="stmt"/>
278
+ <line num="614" count="7" type="cond" truecount="2" falsecount="0"/>
279
+ <line num="615" count="2" type="cond" truecount="2" falsecount="0"/>
280
+ <line num="616" count="5" type="cond" truecount="1" falsecount="1"/>
281
+ <line num="617" count="5" type="cond" truecount="2" falsecount="0"/>
282
+ <line num="618" count="0" type="stmt"/>
283
+ <line num="627" count="2" type="stmt"/>
284
+ <line num="629" count="6" type="stmt"/>
285
+ <line num="630" count="6" type="cond" truecount="2" falsecount="0"/>
286
+ <line num="633" count="4" type="stmt"/>
287
+ <line num="634" count="4" type="stmt"/>
288
+ <line num="647" count="3" type="cond" truecount="1" falsecount="1"/>
289
+ <line num="648" count="3" type="cond" truecount="1" falsecount="1"/>
290
+ <line num="649" count="3" type="cond" truecount="1" falsecount="1"/>
291
+ <line num="650" count="3" type="cond" truecount="2" falsecount="0"/>
292
+ <line num="651" count="1" type="stmt"/>
293
+ <line num="652" count="2" type="stmt"/>
294
+ <line num="653" count="2" type="stmt"/>
295
+ <line num="654" count="2" type="stmt"/>
296
+ <line num="655" count="2" type="stmt"/>
297
+ <line num="658" count="7" type="stmt"/>
298
+ </file>
299
+ </project>
300
+ </coverage>